SQL Server转义下划线

464

如何转义下划线字符?

我正在编写类似以下where子句的内容,并希望能够查找实际以 _d 结尾的条目。

Where Username Like '%_d'
8个回答

715

T-SQL中LIKE的参考:

您可以将通配符模式匹配字符作为字面字符使用。要将通配符字符用作字面字符,请将其括在方括号中。下表显示了使用LIKE关键字和[ ]通配符字符的几个示例。

对于您的情况:

... LIKE '%[_]d'

261

显然,@Lasse的解决方案是正确的,但是解决问题还有另一种方法:T-SQL运算符LIKE定义了可选的ESCAPE子句,让您声明一个字符,该字符将转义模式中的下一个字符。

对于您的情况,以下WHERE子句是等效的:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

71
完整的说,ESCAPE 子句是 SQL 标准的一部分,在任何 DBMS 上都可以使用,而不仅仅是在 SQL Server 上。 - user330315

9

这些解决方案完全有道理。不幸的是,对我来说都没有按预期工作。所以我选择了一个变通方法:

select *
from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name

8

在我的情况下,添加[ ]解决了问题。

like '%[\\_]%'

8

我也曾遇到类似的问题,使用类似模式'%_%'并没有奏效-如问题所述 :-)

使用'%\_%'也不起作用,因为第一个\被解释成"like"之前的字符。

使用'%\\_%'可以奏效。双反斜杠\\首先转换为单个反斜杠\,然后在like模式中使用。


4

这个对我有用,只需使用转义字符'%\_%'


3

Gerardo Lima的回答基础上,我在尝试将反斜杠作为我的ESCAPE子句的转义字符时遇到了问题。这会导致问题:

SELECT * FROM table WHERE email LIKE '%@%\_%' ESCAPE '\'

通过使用感叹号解决了这个问题。这个方法行得通:
SELECT * FROM table WHERE email LIKE '%@%!_%' ESCAPE '!'

1

对于SSIS v18.0,这些方法都不适用于我,所以我采用了类似以下的方法:

WHERE CHARINDEX('_', thingyoursearching) < 1

..在这里,我试图忽略带有下划线的字符串。如果您想要查找带有下划线的内容,只需将其翻转即可:

WHERE CHARINDEX('_', thingyoursearching) > 0


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接