2017-07-27 43 views
1

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

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 

以上的例子会被退回,因为数据后,斜线和.txt扩展名之间的一切都为通配符免费游戏。我不希望上述示例在我的通配符搜索中返回。

我试着做字符集,如[^ /],但它似乎只能用于排除字符串开始与斜杠'/'字符。我需要防止通配符在字符串中使用斜线ANYWHERE。

+1

用你正在使用的数据库标记你的问题。 –

回答

3

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

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

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

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

特定匹配运算符/函数因数据库而异。

0

如果您使用的是Oracle,您可以使用REGEXP_LIKE而不是LIKE来更好地控制哪些记录匹配。有关如何使用它的详细信息,请检查this document

相关问题