如何转义下划线字符?

我正在写类似于下面的where子句,并希望能够在结尾找到_d的实际条目。

Where Username Like '%_d'

当前回答

添加[]完成了我的工作

like '%[\\_]%'

其他回答

这招对我很管用,用转盘就行 “% \ _ %”

这些解决方案完全有意义。不幸的是,这两种方法都不尽如人意。我没有和它争论,而是想出了一个变通办法:

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

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

对于你的情况,下面的WHERE子句是等价的:

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

加上Gerardo Lima的回答,我在尝试使用反斜杠作为escape子句的转义字符时遇到了问题。这导致了以下问题:

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

这个问题用感叹号解决了。这工作:

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

我有一个类似的问题,使用类似的模式'%_%'没有工作-正如问题所示:-)

使用“%\_%”也不起作用,因为第一个\被解释为“在like之前”。

使用'%\\_%'可以。\\(双反斜杠)首先转换为单\(反斜杠),然后在类似的模式中使用。