有没有办法从 SQL 通配符 % 中排除一个字符?
Is there a way to exclude a character(s) from the SQL wildcard %?
我正在尝试使用 SQL 进行文件搜索。我需要将搜索保留在我正在进行比较的目录中。在 SQL 中进行 LIKE 或 NOT LIKE 比较时,通配符“%”用于表示 0、1 或多个字符。有没有办法排除或分隔通配符搜索中涉及的字符?我需要进行如下比较:
LIKE 'C:/Data/%.txt'
但是,我不希望“%”在通配符搜索中找到任何包含斜杠“/”字符的记录。我希望它成为 return 示例,例如:
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
以上示例将被 returned,因为 Data 后的斜杠和 .txt 扩展名之间的所有内容都是通配符的免费游戏。我不希望在我的通配符搜索中 return 编辑上述示例。
我试过设置字符集,例如 [^/],但它似乎只能排除以斜杠“/”字符开头的字符串。我需要防止通配符在字符串中的任何位置使用斜杠。
你不能用一个 LIKE 来做到这一点,但你可以这样做:
WHERE MyColumn LIKE 'C:/Data/%.txt'
AND MyColumn NOT LIKE 'C:/Data/%/%.txt'
大多数数据库都支持某种形式的正则表达式。例如:
col regexp '^C:/Data/[^/]?.txt$'
具体匹配 operator/function 因数据库而异。
如果您使用的是 Oracle,则可以使用 REGEXP_LIKE
而不是 LIKE
来更好地控制要匹配的记录。查看 this document 了解如何使用它的详细信息。
我正在尝试使用 SQL 进行文件搜索。我需要将搜索保留在我正在进行比较的目录中。在 SQL 中进行 LIKE 或 NOT LIKE 比较时,通配符“%”用于表示 0、1 或多个字符。有没有办法排除或分隔通配符搜索中涉及的字符?我需要进行如下比较:
LIKE 'C:/Data/%.txt'
但是,我不希望“%”在通配符搜索中找到任何包含斜杠“/”字符的记录。我希望它成为 return 示例,例如:
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
以上示例将被 returned,因为 Data 后的斜杠和 .txt 扩展名之间的所有内容都是通配符的免费游戏。我不希望在我的通配符搜索中 return 编辑上述示例。
我试过设置字符集,例如 [^/],但它似乎只能排除以斜杠“/”字符开头的字符串。我需要防止通配符在字符串中的任何位置使用斜杠。
你不能用一个 LIKE 来做到这一点,但你可以这样做:
WHERE MyColumn LIKE 'C:/Data/%.txt'
AND MyColumn NOT LIKE 'C:/Data/%/%.txt'
大多数数据库都支持某种形式的正则表达式。例如:
col regexp '^C:/Data/[^/]?.txt$'
具体匹配 operator/function 因数据库而异。
如果您使用的是 Oracle,则可以使用 REGEXP_LIKE
而不是 LIKE
来更好地控制要匹配的记录。查看 this document 了解如何使用它的详细信息。