我想在MySQL中将两个字符串作为数字进行比较。我的表中有以下数据:
0,15 kg
0,52 kg
0,68 kg
1,24 kg
现在我想将字符串与该数据进行比较。我尝试的是:
SELECT * FROM `foobar` WHERE weight+0.0 <= '0,7 kg'
由于MySQL似乎不理解逗号作为小数分隔符,我尝试用点替换它:
SELECT * FROM `foobar` WHERE REPLACE(weight+0.0,',','.') <= REPLACE('0,7 kg',',','.')
但是,我总是得到奇怪的结果,包括大于 0.7 的数字。奇怪的是,当我尝试订购重量列时,排序是正确的!
use construct(val as decimal(10,2))
SELECT * FROM `foobar `
WHERE CAST(REPLACE(weight,',','.') AS DECIMAL(10,2)) <= CAST(REPLACE('0,7 kg',',','.') AS DECIMAL(10,2));
查询已经过测试并给出了正确的结果。
此解决方案不能使用索引。更好的方法是针对填充了计算数据的临时表进行查询。或者,您可以将索引十进制列weight_dec添加到此表,并使用触发器根据权重填充数据。然后使用 weight_dec 进行查询。