我需要能够跨多种语言进行“喜欢”查询,以便对元音变音、a 和 A 进行相同处理,等等。我在 oracle 的 10gr2 上,我无法更改 session 。
我一直在尝试这样的事情
nls_upper(col_name,'NLS_SORT=BINARY_AI') like nls_upper('%fur%','NLS_SORT=BINARY_AI')
但我没有任何快乐。无论我做什么,nls_upper 的结果似乎都保留了 U 上的元音变音。
我可以使用任何函数或运算符吗?理想情况下,它还会将德国的 eszett - 看起来像 B 的有趣字符 - 转换为双 S。
谢谢你的帮助!
最佳答案
所以实际上似乎最好的解决方案是将两个字符串都转换为 US7ASCII,因为这样会去掉所有的重音符号。所以我可以这样做:
upper(convert(col_name, 'US7ASCII')) 像 upper(convert('%okopla%','US7ASCII'))
我发现的唯一皱纹是德国 eszett 被转换为 ?。所以我只是要查看我的搜索词,如果它包含一个有趣的 B,那么我将使用 Gary 的 NLS_UPPER ('große', 'NLS_SORT = XGerman'),否则我将转换为ASCII。这有点笨拙,但我们只需要涵盖英语,法语和德语,所以我认为它会好的..
谢谢你的帮助
关于oracle - 不区分大小写和重音的 'like' 比较 oracle 而不改变 oracle 上的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3723382/