oracle - 不区分大小写和重音的 'like' 比较 oracle 而不改变 oracle 上的 session

标签 oracle comparison sql-like diacritics case-insensitive

我需要能够跨多种语言进行“喜欢”查询,以便对元音变音、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/

相关文章:

mysql - 搜索时%通配符如何在sql中准确工作

sql - PostgreSQL:检查数组中的每个项目是否包含在更大的字符串中

oracle - 获取oracle sqlplus中sql脚本的执行时间

sql - Oracle 触发器而不是更新和 ORA-22816 错误

string - 比较两个字符串产生一个数字增量

C# 将列表与自定义对象进行比较但忽略顺序

python - Alembic:包括约束以拒绝带有字符的字符串

c# - 如何使用 OracleClientFactory 将超过 4000 个字符插入到 XmlType 中?

sql - 将 Oracle SQL Select 转换为 PostgreSQL Select

java - 对可能包含数字的字符串进行排序