我正在尝试查找带有重音符号的数据。我已经试过了:
select * from xml_tmp where regexp_like (XMLTYpe.getClobVal(xml_tmp.xml_data), unistr('\0090'))
而且有效。它查找XML数据字段包含where的所有记录。问题在于它仅将大写字母E与重音符匹配。我试图编写一个更通用的查询,以使用对等类查找带有重音元音(a,e,i,o,u,大写和小写以及任何重音)的所有数据。我想要一个正则表达式 仅 匹配重音元音,但是我不确定如何获取它,因为等价类(例如[[=e=]]匹配 所有 e的(带或不带有重音))都可以。
[[=e=]]
另外,这实际上不起作用:
select * from xml_tmp where regexp_like (XMLTYpe.getClobVal(xml_data),'脡');
(使用Oracle 10g)
经过更多的实验后,我发现这似乎行得通:
select * from xml_tmp where regexp_like(XMLTYpe.getClobVal(xml_data),'[^[:graph:][:space:]]')
我以为这[:graph:]会包括 所有 带有或不带有重音符号的大写和小写字符,但似乎它只匹配未 重音的 字符。
[:graph:]
进一步的实验表明,这可能并非在所有情况下都有效。尝试以下查询:
select * from dual where regexp_like (unistr('\0090'),'[^[:graph:][:space:]]'); 假的 ------- X (比赛成功)
所以看起来导致我麻烦的角色与此模式匹配。
select * from dual where regexp_like ('脡','[^[:graph:][:space:]]'); 假的 ------- (比赛失败)
当我尝试使用带重音符号E的复制粘贴语句运行此查询时,匹配失败!我想我复制粘贴的内容实际上是不同的。gh,我想我现在讨厌更改字符编码。