我想知道是否有一种简单的方法来比较忽略重音和大写的两个文本值。我正在使用Oracle数据库。 我已经找到了答案,但说实话,我不明白他们在这里提出的建议Accent and case insensitive collation in Oracle with LIKE。我试过了,这对我没用。基本上我想做的就是两个比较文本值,如'pepé'和'pepe',并获得true作为答案。
没有LIKE指令可以做到吗?
谢谢!
答案 0 :(得分:7)
Oracle安装程序:
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';
<强>输出强>:
VALUE
-----
pepé
答案 1 :(得分:3)
以下列方式使用nlssort
功能:
select * from <your_table> where utl_raw.cast_to_varchar2((nlssort(<inspected_column>, 'nls_sort=binary_ai'))) like 'pe%';
nlssort调用将重音字符转换为其语言基础,并在比较中忽略大小写。
原始来源为this article(在12c验证)。
答案 2 :(得分:1)
在this thread中,您可以执行以下操作:
select * from your_table
where upper(utl_raw.cast_to_varchar2((nlssort(your_column, 'nls_sort=binary_ai')))) like upper('%word%')
答案 3 :(得分:0)
这适用于Ç
和PT-BR(葡萄牙语-巴西)中的其余字符:
SELECT CONVERT( 'ÃÕÑ ÁÉÍ Ç', 'SF7ASCII' ) FROM DUAL;
Result: **AON AEI C**
检查您的数据库版本:
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
答案 4 :(得分:0)
如以下博客所示: https://eduardolegatti.blogspot.com/2013/04/ignorando-caracteres-acentuados.html
@AJPerez 回复是有效的,但与 LIKE 运算符一起使用时可能会遇到问题。 正如@Just Cavin 建议的那样,在查询之前执行它:(10g R2 之后的版本)
ALTER SESSION SET NLS_SORT='WEST_EUROPEAN_AI'; -- 口音不敏感 更改会话集 NLS_COMP='语言学'; -- 不区分大小写