413

如何转义下划线字符?

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

Where Username Like '%_d'
4

7 回答 7

634

LIKE 的 T-SQL 参考

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

对于您的情况:

... LIKE '%[_]d'
于 2008-08-08T11:59:36.340 回答
229

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

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

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';
于 2012-05-02T14:20:40.310 回答
8

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

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

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

于 2020-10-01T10:14:28.840 回答
6

这些解决方案完全有意义。不幸的是,两者都没有像预期的那样对我有用。我没有尝试解决它,而是解决了问题:

select *
from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name
于 2018-06-01T19:50:03.330 回答
4

这对我有用,只需使用转义 '%\_%'

于 2018-10-08T12:59:46.140 回答
1

这些在 SSIS v18.0 中都不适合我,所以我会做这样的事情:

WHERE CHARINDEX('_', thingyoursearching) < 1

..我试图忽略其中带有下划线的字符串。如果您想查找带有下划线的内容,只需将其翻转:

WHERE CHARINDEX('_', thingyoursearching) > 0

于 2019-06-28T18:58:42.450 回答
1

Adding [ ] did the job for me

like '%[\\_]%'
于 2021-02-05T19:26:34.590 回答