2017-10-05 6 views
0

これは愚かな質問ですが、ループから私を助けてください。SQL数値文字列を比較する

SELECT * 

FROM TABLE_NAME T1 

WHERE '10000' > '2' 

なぜ上記の条件がfalseであるのですか? 私はそれをNumberにキャストすることができますが、上記の条件が真でない理由はわかりません。どうもありがとうございました。

答えて

2

あなたはそれがあなたに与え

WHERE 'A' < 'B' 

しようとした場合、真

あなたがしようとした場合

WHERE 'AAAAAB' > 'AAAAAA' 

Bが同じ理由で

より大きいので、それは、trueを返しますWHERE '10000' > '2' false false返品

+0

ありがとうございますが、もう一度。なぜ '30000' <'2'が偽であるのか。私は彼らが最初の文字を比較して、残りの部分を無視するかもしれないと思いますか? –

+0

3の '​​3000'の最初の文字と '2'の最初の文字を比較します.2の3のASCIIコードが3未満であるため、Now 3 <2 falseを返します – iamdeowanshi

2

値がの文字列(数値ではない)と比較されるため、条件はfalseです。同じ理由:

WHERE 'A0000' > 'B' 

はfalseと評価されます。

道徳的な?文字列と日付の定数には単一引用符を使用してください。数字には一重引用符を使用しないでください。

+0

ご返信ありがとうございますが、さらなる質問があります。それでなぜ 'A0000' <'B'がTRUEを返しますか?私は彼らがお互いをどのように比較しているか知りたい。 @PhamNgocVinh。 –

+0

。 。 。比較はアルファベット順であるため、辞書内のエントリと同様です。 –

1

数値タイプと文字列は、別々に扱われます。

例)

1 < 2を比較した場合

'1000'>'2'が数値型の文字種変更FALSE

真です。

'2'

結果の代わりに50を使用して、代わりに '1' 49と を用い49 > 50 = FALSE

'1000'> '1'、TRUEであれば

ASCIIコードを参照してください。

1

すべてであるように、Char型はasciiシステムまたはcharset照合の値を持ちます。

ただ、例えば:

Declare @a char(1)='A',@b char(1)=B,@c char(1)='C' 

値は1つの b値である2 C値は、それはちょうどアルファベット順にSQL Serverの上の文字ベースの変数のためだ3

です。

これは、char、nchar、varchar、またはnvarcharの値を比較すると、プログラムはまず最初のインデックスを調べてから、2番目のインデックスを調べます。