CREATE TABLE TABLE_NAME ( value ) AS
SELECT 'pepé' FROM DUAL;
-- Not necessary to create an index but it can speed things up.
CREATE INDEX value_without_accent_idx
ON TABLE_NAME ( CONVERT( value, 'US7ASCII' ) );
查询:
SELECT *
FROM table_name
WHERE CONVERT( value, 'US7ASCII' ) = 'pepe';
SELECT * FROM V$VERSION;
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
"CORE 11.2.0.1.0 Production"
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
6条答案
按热度按时间oalqel3c1#
Oracle设置:
查询:
输出:
cyvaqqii2#
请按以下方式使用
nlssort
函数:nlssort调用将重音字符转换为它们的语言基础,并在比较中忽略大小写。
原始源代码为this article(在12c上验证)。
fnatzsnv3#
这适用于
Ç
和PT-BR(葡萄牙语-巴西)中的其余字符:检查数据库版本:
wbgh16ku4#
您可以从this thread执行以下操作:
nle07wnf5#
从Oracle 12.2开始,有了 collate 关键字,它可以与 binary_ci 一起使用,用于不区分大小写的搜索,与 binary_ai 一起使用,用于不区分大小写和重音的搜索。这也是一种更适合索引的方法,但我不知道关于索引的确切细节。
SELECT年龄FROM人员WHERE姓名= '佩佩' COLLATE binary_ai
比赛:Pepé
来源:https://blogs.oracle.com/sql/post/how-to-do-case-insensitive-and-accent-insensitive-search-in-oracle-database
0g0grzrc6#
如以下博客所示:https://eduardolegatti.blogspot.com/2013/04/ignorando-caracteres-acentuados.html
@AJPerez回复有效,但将其与LIKE运算符一起使用时可能会出现问题。如@Just Cavin所建议,请在查询之前执行该回复:(10 g R2之后的版本)
更改会话集NLS_SORT =“西欧AI”;--不区分重音的ALTER SESSION集NLS_COMP =“语言”;--不区分大小写