2009-04-10 27 views
1

Microsoft SQL Serverの指定された文字列に完全に一致する部分文字列を見つける方法は何ですか?Microsoft SQL Serverで完全一致を検索する機能

たとえば、文字列 '0000020354'では、 '20354'を検索します。もちろん、完全一致でなければなりません。私はCHARINDEX(@providerId、external_prv_id)> -1を使用しようとしましたが、CHARINDEXの問題は、最初の一致が見つかると直ちにインデックスを返します。

基本的に私はMicrosoft SQL ServerのindexOf( "")のような機能を探しています。 、あなたはLIKEを使用しない場合

SELECT Id FROM TableName WHERE Column LIKE '%' + @ProviderId + '%' 

Columnは2034

が含まれている行を返します。そして:@ProviderIdを想定し

+0

「0000020354」に「2035」(「2034」ではなく)がありますか?あなたは質問を編集したいかもしれません。 – MattH

答えて

1

VARCHAR

あなただけLIKEを使用することですPATINDEX

SELECT Id FROM TableName WHERE PATINDEX('%' + @ProviderId + '%', Column) > 0 

これは、見つかった一致の開始位置を返します。

+0

この値は常にdyanmicです。私はその前にその価値を知りません – Shiva

+0

その数字は単なる例です – Shiva

+0

あなたの質問は混乱しますが、私はPATINDEXがあなたの望むものだと思います。 Seanが書いた2034年のパラマティシズムには問題ありません。上記のCHARINDEXを使用した場所に差し込みます。 – Mark

0

保存しているデータは何ですか?他のストレージタイプ(別のテーブルなど)が適しているように聞こえるかもしれません。


ああ、2034はタイプミスです。私があなたの質問から理解できないことは、正確なマッチングが必要だと言うことです。 CHARINDEXが '20354'に対して0以外の値を返した場合、それは '20354'と一致することがわかります。 @providerIdが何であるかわからない場合は、CHARINDEXの結果とともにクエリーに返してください。あなたは、external_prv_idをしたいなど、ことを含めると同様に、:

SELECT external_prv_id, CHARINDEX(@providerId, external_prv_id) 
     WHERE CHARINDEX(@providerId, external_prv_id) > 0 

を(CHARINDEXは0を返すことは、それは見つからなかった意味することに注意してください。)

をあなたが実際には '20354' のワイルドカードを含めることができることを意味している場合、 PATINDEXが必要です。

0

LIKE%VAL%のものは非常に幅が広​​いです(例:データベースには00000が含まれています。この行をプルする1234を検索します(OPが正しく解釈されない場合)。

あなたが欲しいのは、マッチと行の終わりに続く任意の数のゼロのような何かをする正規表現です。

我々は先行ゼロをトリミングする方法を知っている、この質問から:だから Better techniques for trimming leading zeros in SQL Server?

SUBSTRING(str_col, PATINDEX('%[^0]%', str_col+'.'), LEN(str_col)) 

、クエリであることを組み合わせて、あなたは次のように行うことができます。もちろん

WHERE SUBSTRING(external_prv_id, PATINDEX('%[^0]%', external_prv_id+'.'), LEN(external_prv_id)) = '12345' 

をより優れた(最良?)ソリューションは、INTEGERとしてそれらを格納することであり、完全なインデックス可能性を得ることができ、このようなすべてのものに悩まされる必要はありません。

  • ストア正規化された整数は別の列に をもたらし、すべての内部クエリ
  • は常に整数が、その後パッドを保存 のためにそれを使用する:あなたは本当に正確な文字列を格納する必要があるなら、あなたはオプションのカップルを持っています クエリの際にゼロが付きます
関連する問題