SQL LIKE '%/_Description' returns 意外结果
SQL LIKE '%/_Description' returns unexpected results
我使用 LIKE
语句,如 '%/_Description'
但得到了以下结果:
- 描述
- Something/_Description
使用'%/[_]Description'
,返回"Description"。
如何将结果限制为 "Something/_Description"
请注意这是一个标准的 SQL,所以在 SQL Server/Oracle
上应该是 运行
谢谢,
您需要了解 LIKE 的工作原理:
// return rows like text111, text222, text333 etc
select * from users where username like 'text%';
// return rows like 111text, 222text, 333text etc
select * from users where username like '%text';
// return rows like 111text111, 222text222, 333text333 etc
select * from users where username like '%text%';
你可以转义 wildchar characters with the character defined in the ESCAPE
clause:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
你的情况(未经测试):
WHERE ... LIKE '%/\_Description' ESCAPE '\'
此语法由 SQL 服务器和 Oracle 共享。
您必须正确转义 _,因为它也是 like 的占位符。根据您的 DBMS,它应该是!所以你的陈述可能看起来像 %/!_Description
_
字符是 Oracle 中一个特殊的欢乐字符。这就是返回的行与您预期的不一样的原因。如果此查询是由程序生成的,您可以将 _
替换为 [_]
。
或者,您可以使用 oracle 中的 REPLACE
函数:
REPLACE( string1, string_to_replace [, replacement_string] )
你的情况
REPLACE( string_var, '_', [_] )
请注意,如果您的函数被调用太多次,这可能会成为瓶颈,因此我建议使用转义字符。
示例:
select REPLACE( 'aaaa_bbb', '_', '[_]' ) from dual
我使用 LIKE
语句,如 '%/_Description'
但得到了以下结果:
- 描述
- Something/_Description
使用'%/[_]Description'
,返回"Description"。
如何将结果限制为 "Something/_Description"
请注意这是一个标准的 SQL,所以在 SQL Server/Oracle
上应该是 运行谢谢,
您需要了解 LIKE 的工作原理:
// return rows like text111, text222, text333 etc
select * from users where username like 'text%';
// return rows like 111text, 222text, 333text etc
select * from users where username like '%text';
// return rows like 111text111, 222text222, 333text333 etc
select * from users where username like '%text%';
你可以转义 wildchar characters with the character defined in the ESCAPE
clause:
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
你的情况(未经测试):
WHERE ... LIKE '%/\_Description' ESCAPE '\'
此语法由 SQL 服务器和 Oracle 共享。
您必须正确转义 _,因为它也是 like 的占位符。根据您的 DBMS,它应该是!所以你的陈述可能看起来像 %/!_Description
_
字符是 Oracle 中一个特殊的欢乐字符。这就是返回的行与您预期的不一样的原因。如果此查询是由程序生成的,您可以将 _
替换为 [_]
。
或者,您可以使用 oracle 中的 REPLACE
函数:
REPLACE( string1, string_to_replace [, replacement_string] )
你的情况
REPLACE( string_var, '_', [_] )
请注意,如果您的函数被调用太多次,这可能会成为瓶颈,因此我建议使用转义字符。
示例:
select REPLACE( 'aaaa_bbb', '_', '[_]' ) from dual