在`LIKE`中一起使用`_%`不会返回确切的数据

时间:2017-05-26 08:30:34

标签: sql sql-server sql-like

我猜可能很容易回答类型问题但我第一次面对它,所以任何帮助都会更受欢迎。

我的查询:

SELECT remarks FROM enroll WHERE remarks LIKE 'REC_%'

输出:

remarks
REC_59161
Reclassify Hedge

预期输出仅为REC_59161。是_用于匹配任何单个字符,但我只是想要达到我预期的输出。

4 个答案:

答案 0 :(得分:3)

_ wildcard Character 。所以你必须使用[]来逃避它。

<强>查询

select remarks
from enroll
where remarks like 'REC[_]%';

答案 1 :(得分:2)

下划线_字符实际上是LIKE运算符的特殊字符,%[]^

https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql

在该文章中,您会看到下划线_与任何单个字符匹配。

使用ESCAPE关键字定义转义字符,以允许转义模式匹配字符。我们可以使用!作为转义字符,所以:

WHERE remarks LIKE 'REC!_%' ESCAPE '!'

答案 2 :(得分:1)

_是一个通配符,试试这个:

declare @enroll table (remarks varchar(50));
insert into @enroll values ('REC_59161') , ('Reclassify Hedge');
SELECT remarks FROM @enroll WHERE remarks LIKE 'REC[_]%';

Demo

答案 3 :(得分:0)

有两个问题:

  1. 该列似乎不区分大小写,有关详细信息,请参阅Is the LIKE operator case-sensitive with MS SQL server?。这就是RecReclassify Hedge符合REC
  2. Like的原因
  3. _(以及%)是外卡,你应该逃避 _的模式
  4. 查询:

      SELECT remarks 
        FROM enroll 
       WHERE remarks LIKE 'REC*_%' ESCAPE '*' /* SQL 92 standard */
    

    http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt

      

    使用三元运算符LIKE(或逆,NOT   LIKE),对三个字符串进行操作并返回一个布尔值。   LIKE确定字符串是否与给定的“匹配”   “pattern”(也是一个字符串)。字符'%'百分比)   '_'下划线)在出现时具有特殊含义   图案。可选的第三个​​参数是一个字符串   包含一个字符,称为“转义字符”,用于   当模式中没有需要百分比或下划线时使用   它的特殊含义