1つのSQL Serverデータベーステーブルの1つの列に、パス(ファイルパスではなくディレクトリパスのみ)が含まれます。SQL Serverの "LIKE"機能を使用したファイルパスのテーブルからのファイルパスのサブフォルダの検索
私は現在、LIKE
関数を使用して、指定されたファイルパスのすべてのサブフォルダを返すクエリを持っています。
WHERE Path LIKE @FilePath + '%'
LIKEで使用されるエスケープ文字はすべて有効なファイルパス文字であるため、このアプローチには問題があることを認識しています。完成したクエリでESCAPEを適切に使用するつもりです。
とにかく、私の質問に戻る。クエリを変更して、の指定されたパスのサブフォルダのみを返すようにしたいと考えています。これは文字列の最後にスラッシュを付けるのと同じくらい簡単なことではありません。明らかに、ワイルドカードの%は、文字列の右側の部分を解析するときにすべてをゴブリングします。
私は[^]エスケープシーケンスを使用して、おそらく\文字を除外する検索を行っていましたが、私はそれに幸運を持っていませんでした。私はこれを試みた。
WHERE Path LIKE @FilePath + '[^\]'
しかし、意図した結果が得られないため、正しく使用しているかどうかはわかりません。ここで
カラムに関数を適用すると、効果的にクエリを非[sargable](http://en.wikipedia.org/wiki/Sargable)にしています。一方、固定文字列(マスク文字や '%'、 '_'や' [...] 'などの式とは対照的に)で始まるパターンに対する' LIKE'は、利用される。 –
私の場合、Andriyの列はNVARCHAR(MAX)なので、それはとにかく索引付けされません。しかし、良い点。 @Charl Lamprecht - あなたの答えをありがとう、LEFTの使用は私にLIKEオペレータのエスケープ文字を扱わなければならないという手間を省く - 歓声! –