如何转义下划线字符?
我正在编写类似以下where子句的内容,并希望能够查找实际以 _d 结尾的条目。
Where Username Like '%_d'
如何转义下划线字符?
我正在编写类似以下where子句的内容,并希望能够查找实际以 _d 结尾的条目。
Where Username Like '%_d'
您可以将通配符模式匹配字符作为字面字符使用。要将通配符字符用作字面字符,请将其括在方括号中。下表显示了使用LIKE关键字和[ ]通配符字符的几个示例。
对于您的情况:
... LIKE '%[_]d'
显然,@Lasse的解决方案是正确的,但是解决问题还有另一种方法:T-SQL运算符LIKE
定义了可选的ESCAPE子句,让您声明一个字符,该字符将转义模式中的下一个字符。
对于您的情况,以下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
在我的情况下,添加[ ]
解决了问题。
like '%[\\_]%'
我也曾遇到类似的问题,使用类似模式'%_%'
并没有奏效-如问题所述 :-)
使用'%\_%'
也不起作用,因为第一个\
被解释成"like"之前的字符。
使用'%\\_%'
可以奏效。双反斜杠\\
首先转换为单个反斜杠\
,然后在like模式中使用。
这个对我有用,只需使用转义字符'%\_%'
在Gerardo Lima的回答基础上,我在尝试将反斜杠作为我的ESCAPE子句的转义字符时遇到了问题。这会导致问题:
SELECT * FROM table WHERE email LIKE '%@%\_%' ESCAPE '\'
SELECT * FROM table WHERE email LIKE '%@%!_%' ESCAPE '!'
对于SSIS v18.0,这些方法都不适用于我,所以我采用了类似以下的方法:
WHERE CHARINDEX('_', thingyoursearching) < 1
..在这里,我试图忽略带有下划线的字符串。如果您想要查找带有下划线的内容,只需将其翻转即可:
WHERE CHARINDEX('_', thingyoursearching) > 0
ESCAPE
子句是 SQL 标准的一部分,在任何 DBMS 上都可以使用,而不仅仅是在 SQL Server 上。 - user330315