如何逃避下划线角色?
我正在编写类似于以下where子句的内容,并希望能够在最后找到带有_d的实际条目。
Where Username Like '%_d'
答案 0 :(得分:438)
T-SQL Reference for LIKE for SQL Server 2000:
您可以使用通配符模式匹配字符作为文字字符。要将通配符用作文字字符,请将通配符括在括号中。该表显示了使用LIKE关键字和[]通配符的几个示例。
对于你的情况:
... LIKE '%[_]d'
答案 1 :(得分:169)
显然@Lasse解决方案是正确的,但还有另一种方法可以解决您的问题:T-SQL运算符LIKE
定义了可选的ESCAPE子句,它允许您声明一个将转义下一个字符的字符进入模式。
对于您的情况,以下WHERE子句是等效的:
WHERE username LIKE '%[_]d'; -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
答案 2 :(得分:1)
这些解决方案完全有意义。不幸的是,没有像我预期的那样对我有用我没有试图解决这个问题,而是选择了解决方案:
select * from information_schema.columns
where replace(table_name,'_','!') not like '%!%'
order by table_name
答案 3 :(得分:1)
这对我有用,只是使用转义符
'%\_%'
答案 4 :(得分:1)
我在使用类似模式'%_%'
时遇到了类似的问题,该问题不起作用-正如问题所表明的:-)
使用'%\_%'
也不起作用,因为第一个\
被解释为“在喜欢之前”。
使用'%\\_%'
可行。首先将\\
(双反斜杠)转换为单个\
(反斜杠),然后在类似模式中使用。
答案 5 :(得分:0)
在SSIS v18.0中,这些都不对我有用,所以我会做这样的事情:
WHERE CHARINDEX('_', thingyoursearching) < 1
..在这里,我试图忽略带有下划线的字符串。如果要查找带有下划线的内容,只需翻转一下即可:
WHERE CHARINDEX('_', thingyoursearching) > 0
答案 6 :(得分:-1)
喜欢'%[\_]%'
添加 [ ] 为我完成了工作