如何解决Oracle中不区分大小写的搜索
从10gR2开始,Oracle允许通过设置NLS_COMP
和NLS_SORT
会话参数来微调字符串比较的行为:
sql> SET heading OFF
sql> SELECT *
2 FROM NLS_SESSION_ParaMETERS
3 WHERE ParaMETER IN ('NLS_COMP', 'NLS_SORT');
NLS_SORT
BINARY
NLS_COMP
BINARY
sql>
sql> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
2 FROM DUAL;
0
sql>
sql> ALTER SESSION SET NLS_COMP=LINGUISTIC;
Session altered.
sql> ALTER SESSION SET NLS_SORT=BINARY_CI;
Session altered.
sql>
sql> SELECT *
2 FROM NLS_SESSION_ParaMETERS
3 WHERE ParaMETER IN ('NLS_COMP', 'NLS_SORT');
NLS_SORT
BINARY_CI
NLS_COMP
LINGUISTIC
sql>
sql> SELECT CASE WHEN 'abc'='ABC' THEN 1 ELSE 0 END AS GOT_MATCH
2 FROM DUAL;
1
您还可以创建不区分大小写的索引:
create index
nlsci1_gen_person
on
MY_PERSON
(NLSSORT
(PERSON_LAST_NAME, 'NLS_SORT=BINARY_CI')
)
;
该信息来自Oracle不区分大小写的搜索。文章提到了,REGEXP_LIKE
但似乎也适用于旧版本=
。
在10gR2之前的版本中,这实际上是做不到的,如果不需要 区分重音符号的 搜索,通常的方法是只UPPER()
对列和搜索表达式都使用。
解决方法
LIKE
和其他比较运算符=
等的默认行为区分大小写。
是否可以使它们不区分大小写?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。