我需要能够跨多种语言进行'喜欢'查询,以便将变音符号,a和A视为相同,依此类推。我在oracle的10gr2上,我无法改变会话。
我一直在尝试像
这样的事情nls_upper(col_name,'NLS_SORT=BINARY_AI') like nls_upper('%fur%','NLS_SORT=BINARY_AI')
但是我没有任何快乐。无论我做什么,nls_upper的结果似乎都保留了U上的变音符号。
我可以使用任何功能或操作员吗?理想情况下,它还会将德语eszett(看起来像B的有趣角色)转换为双S。
感谢您的帮助!
答案 0 :(得分:2)
所以实际上似乎最好的解决方案是将两个字符串转换为US7ASCII,因为它会删除所有重音符号。所以我可以这样做:
upper(convert(col_name,'US7ASCII'))like upper(convert('%okopla%','US7ASCII'))
我发现的唯一的皱纹就是德国的eszett被转换成了?所以我只想查看我的搜索词,如果它包含一个有趣的B,那么我将使用Gary的NLS_UPPER('große','NLS_SORT = XGerman'),否则我只会转换为ASCII。这是一个小小的kludgy,但我们只需要涵盖英语,法语和德语,所以我认为它会没问题。
感谢您的帮助
答案 1 :(得分:1)
根据Oracle documentation,您需要同时指定NLS_COMP = LINGUISTIC和NLS_SORT = XGERMAN_AI,它们都是变音符号和Eszett不敏感的。我想你必须用replace()
手动替换Eszetts。
答案 2 :(得分:0)
这是否符合要求?
select case when NLS_UPPER ('große', 'NLS_SORT = XGerman')
like '%SS%' then 'YES' else 'no' end match
from dual;
如果没有,你必须详细说明要求。