【发布时间】:2021-10-01 12:35:49
【问题描述】:
如何转义下划线字符?
我正在编写类似于以下 where 子句的内容,并希望能够找到末尾带有 _d 的实际条目。
Where Username Like '%_d'
【问题讨论】:
标签: sql-server
如何转义下划线字符?
我正在编写类似于以下 where 子句的内容,并希望能够找到末尾带有 _d 的实际条目。
Where Username Like '%_d'
【问题讨论】:
标签: sql-server
您可以将通配符模式匹配字符用作文字字符。要将通配符用作文字字符,请将通配符括在方括号中。下表显示了使用 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 '^';
【讨论】:
ESCAPE 子句是 SQL 标准的一部分,适用于任何 DBMS,而不仅仅是 SQL Server。
我遇到了类似的问题,使用类似模式 '%_%' 不起作用 - 正如问题所示:-)
使用'%\_%' 也不起作用,因为第一个\ 被解释为“在同类之前”。
使用'%\\_%' 有效。 \\(双反斜杠)首先转换为单\(反斜杠),然后在类似的模式中使用。
【讨论】:
这些解决方案完全有意义。不幸的是,两者都没有像预期的那样对我有用。我没有尝试解决它,而是解决了问题:
select *
from information_schema.columns
where replace(table_name,'_','!') not like '%!%'
order by table_name
【讨论】:
这对我有用,只需使用转义
'%\_%'
【讨论】:
这些在 SSIS v18.0 中都不适合我,所以我会做这样的事情:WHERE CHARINDEX('_', thingyoursearching) < 1
..我试图忽略带有下划线。如果您想查找带有下划线的内容,只需翻转一下即可:WHERE CHARINDEX('_', thingyoursearching) > 0
【讨论】:
添加 [ ] 为我完成了这项工作
like '%[\\_]%'
【讨论】: