为什么十进制字段在where子句中接受字母?

时间:2017-12-20 16:28:06

标签: mysql

我在桌子上尝试了一些查询,我注意到在十进制字段中可以在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);

选择

select cost from materials WHERE cost > 'a';

RESULT

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

如果我在带小数的子句中使用数字,我怎样才能得到结果?

谢谢

2 个答案:

答案 0 :(得分:2)

为了进行比较,MySQL将字符串a转换为数字,结果为0

生成的查询是

select cost from materials WHERE cost > 0;

答案 1 :(得分:1)

十进制列不包含字母。相反,您将十进制值与字符串进行比较。

MySQL对这种混合比较做了什么?它将值转换为兼容类型。在这种情况下,类型是数字。因此,'a'将转换为数字。

什么号码? MySQL使用前导"类似数字"将字符串转换为数字。字符(数字,小数点和负号)。 'a'不是"数字",所以没有任何东西被转换。值为0。所以,你的比较相当于:

where cost > 0