我有一个这样的查询:
SELECT DISTINCT name
FROM table
WHERE name COLLATE BINARY_AI LIKE '%ög%' ESCAPE '\';
预期的行为是它返回包含
ög
的名称,例如:
Högendorf
但是,例如,也可以只包含
og
的名称,例如:
Vogel
但是,执行此查询不会提供任何结果。 作为参考,名称的数据类型是 CHAR(30)
如果我稍微改变它以使用
'%og%'
代替:
SELECT DISTINCT name
FROM table
WHERE name COLLATE BINARY_AI LIKE '%og%' ESCAPE '\';
它突然起作用并提供了预期的结果。 如果我保留
'%ög%'
但删除查询的 ESCAPE '\'
部分,它也会这样做。
SELECT DISTINCT name
FROM table
WHERE name COLLATE BINARY_AI LIKE '%ög%';
如果我删除 COLLATE BINARY_AI
但保留
ESCAPE '\'
,它可以工作,但找不到像
Vogel
这样的结果
如果我向 COLLATE BINARY_AI
添加第二个
'%ög%'
,它也根本不会返回任何结果。为什么会发生这种情况?我该如何解决这个问题以便保留 ESCAPE 功能?
此问题已在
Oracle Database 23c Free 版本中修复:
select banner_full from v$version;
BANNER_FULL
-------------------------------------------------------------------------------
Oracle Database 23c Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.3.0.23.09
create table t (
c1 varchar2(30)
);
insert into t values ( 'Högendorf' );
insert into t values ( 'Vogel' );
select * from t
where c1 collate binary_ai like '%ög%' escape '\';
C1
------------------------------
Högendorf
Vogel
如果您需要解决此问题,请与支持人员联系。