【问题标题】:Is there a way to exclude a character(s) from the SQL wildcard %?有没有办法从 SQL 通配符 % 中排除一个字符?
【发布时间】:2017-07-27 17:42:16
【问题描述】:

我正在尝试使用 SQL 进行文件搜索。我需要将搜索保留在我进行比较的目录中。在 SQL 中进行 LIKE 或 NOT LIKE 比较时,通配符 '%' 用于表示 0、1 或多个字符。有没有办法排除或分隔该通配符搜索中涉及的字符?我需要进行如下比较:

LIKE 'C:/Data/%.txt'

但是,我不希望 '%' 找到在通配符搜索中包含斜杠 '/' 字符的任何记录。我希望它返回如下示例:

C:/Data/file1.txt
C:/Data/records_2017.txt
C:/Data/listing#7.txt

但我不希望通配符在其中找到带有斜杠的记录,因为在我的情况下,它超出了我有兴趣在其中进行文件搜索的当前文件夹:

C:/Data/OtherFolder/file1.txt
C:/Data/System/SomethingElse/records_2016.txt

上面的例子会被返回,因为 Data 后面的斜线和 .txt 扩展名之间的所有内容都是通配符的免费游戏。我不希望在通配符搜索中返回上述示例。

我尝试做字符集,例如 [^/],但它似乎只能排除以斜杠“/”字符开头的字符串。我需要防止通配符在字符串中的任何位置使用斜杠。

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql wildcard sql-like


【解决方案1】:

你不能用一个 LIKE 来做到这一点,但你可以这样做:

WHERE MyColumn LIKE 'C:/Data/%.txt'
AND MyColumn NOT LIKE 'C:/Data/%/%.txt'

【讨论】:

    【解决方案2】:

    如果您使用的是 Oracle,您可以使用 REGEXP_LIKE 而不是 LIKE 来更好地控制要匹配的记录。使用方法请查看this document

    【讨论】:

      【解决方案3】:

      大多数数据库都支持某种形式的正则表达式。例如:

      col regexp '^C:/Data/[^/]?.txt$'
      

      具体的匹配运算符/函数因数据库而异。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-20
        • 1970-01-01
        • 2018-03-07
        • 2015-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多