2010-11-22 9 views
2

コードの範囲内のコードを持つすべての製品について、自分の製品テーブルに対してクエリを実行しています。SQL ServerクエリでBETWEENフィルタで不一致のデータが返される

これは私のSQLクエリです:

select prdcod 
from products 
where prdcod between 'F-DH1' and 'F-FMS' 
order by prdcod 

と、このクエリの結果は次のとおりです。

F-DH1 
F-DH2 
F-DH3 
FET-RAZ  <-- What is this value doing here!? 
F-FMC 
F-FML 
F-FMS 

はどのようにこの奇妙な値は、クエリの結果に、それは方法だ作ることができますか?

PS betweenの代わりに<=>=を使用しても同じ結果が得られます。

+5

があなたの照合を除外ように思える結果は意味をなさないこの方法では、FEは、FDとFMとの間にあります。 – Arvo

+1

ありがとうArvo!あなたは正しく、その列の照合順序をModern_Spanish_CI_ASからLatin1_General_CP1_CI_ASに変更すると、奇数値が削除されました。私はあなたにアップアップすることができるようにこれをもう一度答えとして書くことができますか?ありがとう! –

+0

@Arvo:私たちはそれをupvoteできるように答えが必要です。 @パブロ: "ユーザー"に通知する@userを使用して... – gbn

答えて

4

に答えるために、次のコメントを推進OP要求によると:

があなたの照合除外のように思えます' - '記号 - このように結果は意味をなさない、FEはFDとFMの間にある。 ' - ' 記号 -

:)

0

〜> =および< =主に数値演算(日付を含む)に使用されます。これを文字列に使用しようとしていますが、演算子が各文字列をどのように解釈するかを決めるのは困難です。

ここで私があなたの目標を理解していると思うのですが、SQL Serverクエリを使用して可能かどうかは完全にはわかりません。これは、コードで実装する必要があるビジネスロジック(製品コードのおかげ)である可能性があります。 Entity FrameworkやLinq-to-SQLのようなものは、探しているデータを取得するのに適しているかもしれません。

0

追加はどうですか?AND LEFT(prdcod, 2) = 'F-'

+0

できません。これらの範囲は、特定の場合に起こります。すべての製品コードが「F-」で始まるわけではありません。範囲の制限はパラメータによって渡されます。 –

0

交換してみてください「 - 」スペースを持つためには、あなたが期待するものですので:

DECLARE @list table(word varchar(50)) 

--create list 
INSERT INTO @list 
SELECT 'F-DH1' 
UNION ALL 
SELECT 'F-DH2' 
UNION ALL 
SELECT 'F-DH3' 
UNION ALL 
SELECT 'FET-RAZ' 
UNION ALL 
SELECT 'F-FMC' 
UNION ALL 
SELECT 'F-FML' 
UNION ALL 
SELECT 'F-FMS' 

--original order 
SELECT * FROM @list order by word 

--show how order changes 
SELECT *,replace(word,'-',' ') FROM @list order by replace(word,'-',' ') 

--show between condition 
SELECT * FROM @list where replace(word,'-',' ') between 'F DH1' and 'F FMS' 
+0

これを行うには、範囲内のすべてのコードを事前に知っておく必要があります。これは、最初にクエリから取得しようとしているコードです。それでも、replace(@rstart、 ' - '、 '')とreplace(@rend、 ' - '、 '')の間でreplace(prdcod、 ' - '、 '')回避策ではなく、解決策を探しています。 –

+0

いいえ、あなたは、あなたが期待していた順序を与えない文字を置き換えなければならないでしょう。私は物事を注文するときには " - "は無視されると思うが、それのような他の文字があるかもしれない。したがって基本的にF-DはFDと同じです。つまり、FET-RAZはF-DとF-Fの開始コードの間にあります。 – Michael

+0

申し訳ありませんが、間違っています。あなたは問題のないようにコード内でそれを使うことができます。それは大きな問題ではありません。照合を変更するよりも優れています。 – Michael

関連する問題