SQL LIKE '%/_Description' returns 意外结果

SQL LIKE '%/_Description' returns unexpected results

我使用 LIKE 语句,如 '%/_Description' 但得到了以下结果:

  1. 描述
  2. 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