SQL LIKE'%/ _ Description'返回意外结果

时间:2015-06-01 11:56:17

标签: sql wildcard sql-like

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

  1. 描述
  2. 东西/ _Description
  3. 使用'%/[_]Description',返回“描述”。

    如何将结果仅限制为"Something/_Description"

    请注意,这是一个标准的SQL,因此应该在SQL Server / Oracle上运行

    谢谢,

4 个答案:

答案 0 :(得分:2)

您可以使用wildchar characters

中定义的字符转义ESCAPE clause
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]

在你的情况下(未经测试):

WHERE ... LIKE '%/\_Description' ESCAPE '\'

此语法由SQL Server和Oracle共享。

答案 1 :(得分:0)

您需要了解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%'; 

答案 2 :(得分:0)

你必须正确地逃避_因为它也是一个占位符。基于你的DBMS应该是!所以你的陈述可能看起来像%/!_Description

答案 3 :(得分:0)

_ char是Oracle中一个特殊的快乐角色。这就是为什么返回的行不符合您的预期。如果此查询是由程序生成的,则您可以使用_代替[_]。 或者,您可以使用oracle中的REPLACE函数:

REPLACE( string1, string_to_replace [, replacement_string] )

在你的情况下

REPLACE( string_var, '_', [_] )

请注意,如果您的函数被调用太多次,这可能是一个瓶颈,所以我建议使用转义字符。

示例:

select REPLACE( 'aaaa_bbb', '_', '[_]' ) from dual