2017-12-20 4 views
0

は、私はテーブルの上にいくつかのクエリをしようとしていたと私はそれがSELECT句のすべての結果10進フィールドがwhere句の文字を受け入れるのはなぜですか?

CREATE TABLE materials (
id INT AUTO_INCREMENT PRIMARY KEY, 
description VARCHAR(255), 
cost DECIMAL(19 , 4) NOT NULL 
); 

INSERT INTO materials(description,cost) 
VALUES('Bicycle', 500.34),('Seat',10.23),('Break',5.21); 

を得る場所で手紙を渡すために10進数フィールドで可能であることに気づいた

select cost from materials WHERE cost > 'a'; 

RESULT

| cost | 
|--------| 
| 500.34 | 
| 10.23 | 
| 5.21 | 

小数点以下の句で数字を使用する場合のみ、どのように結果を得ることができますか?

は比較ですを作るためにあなたに

+0

... ' 'A1' + 0を、SELECT '86trombones' + 0、 '-1.23fourfive' + 0 'となる。この動作(数値に変換された文字列)は、MySQLリファレンスマニュアルに記載されています。 – spencer7593

答えて

2

ありがとう、MySQLは結果のクエリは、10進数の列は、文字が含まれていません

select cost from materials WHERE cost > 0; 
1

ある0

になり数に文字列aを変換し、 。代わりに、小数点の値を文字列と比較しています。

このような混在比較では何が行われますか?値を互換性のある型に変換します。この場合、型は数値です。したがって、'a'は数字に変換されます。

何番ですか? MySQLは文字列を数字に似た文字(数字、小数点、およびマイナス記号)を使用して数値に変換します。 'a'は "数字のような"ものではないので、何も変換されません。値は0です。だから、あなたの比較は同等です:これを試してみてください何MySQLが文字列でやっているのデモンストレーションとして

where cost > 0 
+0

ありがとう、私は文字列を変換しないように強制できますか? –

+0

@PaoloRossi。 。 。 Aaはintに変換することに反対した。私はユリイターを見ません –

+0

シンプルな「いいえ」がここではっきりしています。 –

関連する問題