これは愚かな質問ですが、ループから私を助けてください。SQL数値文字列を比較する
SELECT *
FROM TABLE_NAME T1
WHERE '10000' > '2'
なぜ上記の条件がfalseであるのですか? 私はそれをNumberにキャストすることができますが、上記の条件が真でない理由はわかりません。どうもありがとうございました。
これは愚かな質問ですが、ループから私を助けてください。SQL数値文字列を比較する
SELECT *
FROM TABLE_NAME T1
WHERE '10000' > '2'
なぜ上記の条件がfalseであるのですか? 私はそれをNumberにキャストすることができますが、上記の条件が真でない理由はわかりません。どうもありがとうございました。
あなたはそれがあなたに与え
WHERE 'A' < 'B'
しようとした場合、真
あなたがしようとした場合
WHERE 'AAAAAB' > 'AAAAAA'
Bが同じ理由で
より大きいので、それは、trueを返しますWHERE '10000' > '2'
false false返品
値がの文字列(数値ではない)と比較されるため、条件はfalseです。同じ理由:
WHERE 'A0000' > 'B'
はfalseと評価されます。
道徳的な?文字列と日付の定数には単一引用符を使用してください。数字には一重引用符を使用しないでください。
ご返信ありがとうございますが、さらなる質問があります。それでなぜ 'A0000' <'B'がTRUEを返しますか?私は彼らがお互いをどのように比較しているか知りたい。 @PhamNgocVinh。 –
。 。 。比較はアルファベット順であるため、辞書内のエントリと同様です。 –
数値タイプと文字列は、別々に扱われます。
例)
1 < 2
を比較した場合
'1000'>'2'
が数値型の文字種変更FALSE
真です。
'2'
結果の代わりに50を使用して、代わりに '1' 49と を用い49 > 50
= FALSE
'1000'> '1'、TRUEであれば
ASCIIコードを参照してください。
すべてであるように、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番目のインデックスを調べます。
ありがとうございますが、もう一度。なぜ '30000' <'2'が偽であるのか。私は彼らが最初の文字を比較して、残りの部分を無視するかもしれないと思いますか? –
3の '3000'の最初の文字と '2'の最初の文字を比較します.2の3のASCIIコードが3未満であるため、Now 3 <2 falseを返します – iamdeowanshi