我想知道是否有一种简单的方法来比较忽略重音和大写的两个文本值。我正在使用Oracle数据库。 我已经搜索了一个答案,但老实说,我不明白他们在这里提出的Accent and case insensitive collation in Oracle with LIKE。我试过了,它不适合我。基本上,我想要做的就是与文本值比较,比如“pepé”和“pepe”,并获得真实答案。比较字符串忽略SQL中的重音(ORACLE)
有没有可能不使用LIKE指令?
谢谢!
我想知道是否有一种简单的方法来比较忽略重音和大写的两个文本值。我正在使用Oracle数据库。 我已经搜索了一个答案,但老实说,我不明白他们在这里提出的Accent and case insensitive collation in Oracle with LIKE。我试过了,它不适合我。基本上,我想要做的就是与文本值比较,比如“pepé”和“pepe”,并获得真实答案。比较字符串忽略SQL中的重音(ORACLE)
有没有可能不使用LIKE指令?
谢谢!
甲骨文设置:
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é
使用nlssort
功能以下列方式:
select * from <your_table> where utl_raw.cast_to_varchar2((nlssort(<inspected_column>, 'nls_sort=binary_ai'))) like 'pe%';
的NLSSORT调用转换重音符号,以他们的语言基础和比较中忽略大小写。
原始来源是this article(在12c验证)。
你想比较忽略大小写和重音的相等的字符串吗?或者做一个'LIKE'比较,忽略大小写和重音?将'nls_sort'和'nls_comp'设置为您建议链接的答案似乎可以解决您的问题。你能解释一下你不明白的东西吗?你有没有试过运行两个'alter session'语句?它没有工作吗? –
@JustinCave基本上我想做的是以城市的名义创建一个Join,但是在我拥有同一个城市的数据中,有时候会出现口音,有时不会出现,所以它会将它们识别为两个不同的城市。我无法更改数据。 – Tiasn
您是否尝试在会话中设置'nls_sort'和'nls_comp'并运行查询?在这种情况下,这看起来会实现你想要的结果,这与你确定的问题是重复的。如果这样不能解决问题,您能帮我们了解哪些具体不适合您? –