【问题标题】:SQL LIKE to find either -,/,_SQL LIKE 查找 -,/,_
【发布时间】:2014-05-29 17:33:40
【问题描述】:

尝试从文本字段中的格式可以是 1/2/2014、1-2-2014 或 1_2_2014 的表格中进行选择。在此格式之外还涉及其他文本,但这无关紧要,但这就是为什么这是文本而不是日期类型。

我尝试了'%[-,_,/]%[-,_,/]%',但它不起作用,我尝试转义括号中的特殊字符,例如%[-,!_,/]%[-,!_,/]%' ESCAPE '!',这也不起作用。有什么建议吗?

我想避免使用三个搜索,例如,

LIKE '%/%/%'
OR '%-%-%'
OR '%!_%!_%' ESCAPE '!'

编辑:使用 SQLite3

【问题讨论】:

  • 您使用的是什么关系型数据库?您可能必须使用REGEX 而不是LIKE
  • 根据您使用的数据库,通常有 LIKE 的正则表达式版本可用。 MySQL 有RLIKE,Oracle 有REGEXP_LIKE,等等

标签: sql sqlite wildcard sql-like


【解决方案1】:

在 SQL 中使用 LIKE 运算符时没有类似正则表达式的行为。您可以同时使用两个表达式和OR

select * from table
 where column like '%-%-%'
    or column like '%/%/%'

【讨论】:

    【解决方案2】:

    感谢您的信息。我最终切换到在 SQLite 中支持 [] 的 GLOB 运算符。

    示例已更改为 GLOB '?[/-_]?[/-_]??*' 其中 * 用作 % 和 ?用作 GLOB 函数的 _。

    还要感谢 Amadeaus9 指出分隔符之间的最少字符数,因此“//”不是有效答案。

    【讨论】:

      【解决方案3】:

      如果您使用的是 T-SQL(AKA SQL Server),您不希望在字符集中使用逗号 - 即 LIKE '%[/_-]%[/_-]%'。但是,请记住,这可以匹配在其中任何位置具有集合中任意两个字符的任何内容。

      编辑:它看起来不像 SQLite 支持使用它的 LIKE 运算符,基于this link. 相关引用:

      There are two wildcards used in conjunction with the LIKE operator:
      The percent sign (%)
      The underscore (_)
      

      不过,您可能想查看this question,,其中详细介绍了在 SQLite 中使用正则表达式。

      【讨论】:

      • 也不起作用,尝试使用和不使用通配符 _([/-] 和 [/-_])。
      • 编辑以说明 SQLite 的使用。
      【解决方案4】:

      不可能使用 LIKE 语法。

      但是 Sqlite3 将支持 REGEXP 运算符;这是调用实际进行匹配的用户定义函数的语法糖。如果您的平台提供,那么您可以使用例如

      x REGEXP '.*[/_-].*[/_-].*'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-15
        • 1970-01-01
        • 2018-06-14
        • 2013-06-26
        • 2015-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多