SQL Server逃脱下划线

时间:2008-08-08 11:56:36

标签: sql-server

如何逃避下划线角色?

我正在编写类似于以下where子句的内容,并希望能够在最后找到带有_d的实际条目。

Where Username Like '%_d'

7 个答案:

答案 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)

喜欢'%[\_]%'

添加 [ ] 为我完成了工作