2010-12-30 5 views
2

私の(PostgreSQL)データベースにwild cardsのリストを保存したいと思います。ワイルドカードを使用する -

この場合、*は任意の値を意味する

  • Laughing Unicorn v1.*

  • Firefox v4.*

  • jump * start


はDB内でこれらの値を格納した後、私は、文字列は、私はLaughing Unicorn v1.8が行と一致するかどうかを確認したい場合がありますパターン例えば

のいずれかと一致するかどうかを確認するためにDBを照会したいと思います。


:)

+0

はpostgresですか、なぜタグmysql? – ajreal

+2

ワイルドカードを使用した検索は、その語の最後の文字ではありません。このような検索では、この場合にインデックスを効率的に使用することはできず、完全なテーブルスキャン**が行われます。このようなものが必要な場合は、別の方法で動作する全文検索を調べてください。 – SingleNegationElimination

答えて

3
CREATE TABLE patterns (pattern text); 
INSERT INTO patterns VALUES ('Laughing Unicorn v1.*'), 
          ('Firefox v4.*'), 
          ('jump * start'); 
SELECT 'Laughing Unicorn v1.8' 
     LIKE ANY (SELECT replace(pattern, '*', '%') FROM patterns); 
+0

返事ありがとう!私は交換が必要な理由を説明していただけますか? :) – RadiantHex

+0

@RadianHex: '%'は 'LIKE'のワイルドカード文字であり、' * 'ではありません。もちろん、検索文字列を '%'で始めることもできます。それはあなたがどこから来ているかによって異なります。 –

関連する問題