0

データベース内の範囲内で一致する文字列をクエリしようとしています。テーブルには2つの列FromCodeとがありToCodeます。

以下はサンプルデータです(テーブルが呼び出されると仮定しますCodeList):

FromCode    ToCode
IV1 0AA     IV9 9ZZ
IV10 0AA    IV28 9ZZ
IV30 0AA    IV32 9ZZ
IV36 0AA    IV36 9ZZ
IV40 0AA    IV49 9ZZ
IV51 0AA    IV56 9ZZ
IV63 0AA    IV63 9ZZ

したがって、クエリを実行すると

SELECT *
FROM CodeList
WHERE FromCode <= 'IV1 1AB' AND ToCode >= 'IV1 1AB'

結果を返します

IV1 0AA   IV9 9ZZ 

どちらが正しい。しかし、私がこれを実行すると:

SELECT *
FROM CodeList
WHERE FromCode <= 'IV2 1AB' AND ToCode >= 'IV2 1AB'

私が返す結果は

IV1 0AA    IV9 9ZZ
IV10 0AA   IV28 9ZZ

したがって、人間にとって、文字列IV2 2ABはではありIV1 0AA - IV9 9ZZませんIV10 0AA - IV28 9ZZ

誰かがデータを検索するためのより良い方法を提案できれば、それは大いにありがたいです。また、これを実行しているエンジンはSQLServer2012です。

どうもありがとう!

4

1 に答える 1

0
SELECT *
FROM CodeList
WHERE Cast(Substring(Replace(FromCode,' ',''),3,Len(Replace(FromCode,' ',''))-4) as int) <= Cast(Substring(Replace('IV2 1AB',' ',''),3,Len(Replace('IV2 1AB',' ',''))-4) as int)
 AND Cast(Substring(Replace(ToCode,' ',''),3,Len(Replace(ToCode,' ',''))-4) as int) >= Cast(Substring(Replace('IV2 1AB',' ',''),3,Len(Replace('IV2 1AB',' ',''))-4) as int)

使いやすくするための関数に設定してください

于 2012-08-18T10:38:15.497 に答える