我在桌子上尝试了一些查询,我注意到在十进制字段中可以在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 |
如果我在带小数的子句中使用数字,我怎样才能得到结果?
谢谢
答案 0 :(得分:2)
为了进行比较,MySQL将字符串a
转换为数字,结果为0
生成的查询是
select cost from materials WHERE cost > 0;
答案 1 :(得分:1)
十进制列不包含字母。相反,您将十进制值与字符串进行比较。
MySQL对这种混合比较做了什么?它将值转换为兼容类型。在这种情况下,类型是数字。因此,'a'
将转换为数字。
什么号码? MySQL使用前导"类似数字"将字符串转换为数字。字符(数字,小数点和负号)。 'a'
不是"数字",所以没有任何东西被转换。值为0
。所以,你的比较相当于:
where cost > 0