SQL Server逃脱下划线

Gat*_*ler 307 sql-server

如何逃避下划线角色?

我正在写类似下面的where子句,并希望能够在最后找到_d的实际条目.

Where Username Like '%_d'
Run Code Online (Sandbox Code Playgroud)

ang*_*son 482

适用于SQL Server 2000的LIKE的T-SQL参考:

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

对于你的情况:

... LIKE '%[_]d'
Run Code Online (Sandbox Code Playgroud)


Ger*_*ima 187

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

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

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
Run Code Online (Sandbox Code Playgroud)

  • 完成图片:`ESCAPE`子句是SQL标准的一部分,可以在任何DBMS上工作,而不仅仅是SQL Server. (39认同)

Tek*_*ler 9

这些解决方案完全有道理。不幸的是,两者都没有像预期的那样对我有用。我没有尝试解决这个问题,而是采取了解决办法:

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


小智 9

添加[ ]为我完成了这项工作

like '%[\\_]%'
Run Code Online (Sandbox Code Playgroud)


小智 8

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

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

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