2017-07-27 9 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 

しかし、私のような状況で、それは現在のフォルダを超えたので、私は、ワイルドカードがそれにスラッシュでレコードを検索する必要はありません:私はそれのような例を返すようにしたいでしょう。:データの後にスラッシュと拡張子.txtの間にすべてがワイルドカードのためのすべての無料ゲームですので

C:/Data/OtherFolder/file1.txt 
C:/Data/System/SomethingElse/records_2016.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を使用している場合は、LIKEの代わりにREGEXP_LIKEを使用して、一致するレコードをより細かく制御できます。使用方法の詳細については、this documentを参照してください。

関連する問題