如何转义下划线字符?
我正在写类似于下面的where子句,并希望能够在结尾找到_d的实际条目。
Where Username Like '%_d'
T-SQL参考LIKE:
您可以使用通配符模式匹配字符作为文字字符。若要使用通配符作为文字字符,请将通配符括在括号内。下表显示了使用LIKE关键字和[]通配符的几个示例。
对于你的情况:
... LIKE '%[_]d'
显然@Lasse解决方案是正确的,但还有另一种方法来解决你的问题:T-SQL操作符LIKE定义了可选的逃避子句,它允许你声明一个字符,该字符将转义到模式中的下一个字符。
LIKE
对于你的情况,下面的WHERE子句是等价的:
WHERE username LIKE '%[_]d'; -- @Lasse solution WHERE username LIKE '%$_d' ESCAPE '$'; WHERE username LIKE '%^_d' ESCAPE '^';
这些解决方案完全有意义。不幸的是,这两种方法都不尽如人意。我没有和它争论,而是想出了一个变通办法:
select * from information_schema.columns where replace(table_name,'_','!') not like '%!%' order by table_name
'%\_%'
WHERE CHARINDEX('_', thingyoursearching) < 1
WHERE CHARINDEX('_', thingyoursearching) > 0
我有一个类似的问题,使用类似的模式'%_%'不起作用-正如问题所示:-)
'%_%'
使用'%\_%'也没有工作,因为第一个\被解释为“在like"之前”。
\
使用'%\\_%'是有效的。\\(双反斜杠)首先转换为单个\(反斜杠),然后在类似的模式中使用。
'%\\_%'
\\
添加[ ]完成了我的工作
[ ]
like '%[\\_]%'
添加到杰拉尔多·利马的回答,我在尝试使用反斜杠作为escape子句的转义字符时遇到了问题。这导致了以下问题:
SELECT * FROM table WHERE email LIKE '%@%\_%' ESCAPE '\'
这个问题用感叹号解决了。这工作:
SELECT * FROM table WHERE email LIKE '%@%!_%' ESCAPE '!'