【问题标题】:SQL Server Escape an UnderscoreSQL Server 转义下划线
【发布时间】:2021-10-01 12:35:49
【问题描述】:

如何转义下划线字符?

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

Where Username Like '%_d'

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    T-SQL Reference for LIKE:

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

    对于您的情况:

    ... LIKE '%[_]d'
    

    【讨论】:

    • 天哪! ...如果它仍然不起作用,请确保您拥有正确的列。
    【解决方案2】:

    显然@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。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          WHERE CHARINDEX('_', thingyoursearching) < 1

          ..我试图忽略带有下划线。如果您想查找带有下划线的内容,只需翻转一下即可:

          WHERE CHARINDEX('_', thingyoursearching) > 0

          【讨论】:

            【解决方案7】:

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

            like '%[\\_]%'
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2010-09-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-11
              • 2020-10-28
              相关资源
              最近更新 更多