PHP-SQL查询比较数据时需用01而非1,求解决方案
SQL字符串数字比较失效的解决办法
补0可以解决,但不是最优解
要通过补0处理del_thread的话,得保证补0后和del_limit的长度一致。比如如果del_limit都是两位数字,用LPAD函数把del_thread补成两位:
SELECT * FROM table WHERE LPAD(del_thread, 2, '0') < del_limit;
要是del_limit长度不固定,最好两个字段都补到相同最大长度(比如假设最大是三位数字):
SELECT * FROM table WHERE LPAD(del_thread, 3, '0') < LPAD(del_limit, 3, '0');
但这种方法有局限性,后续如果出现更长的数字,就得调整填充长度,维护成本高。
最彻底的解决方式:把字段改成数值类型
问题本质是你用字符串存储数字,数据库会按字典序而非数值大小进行比较,这才导致了不符合预期的结果。
直接把del_thread和del_limit改成INT、TINYINT这类数值类型是一劳永逸的办法,改完后原查询语句SELECT * FROM table WHERE del_thread < del_limit就能正常工作,还能提升查询效率(数值类型索引比字符串索引更高效)。
修改字段类型的SQL示例(MySQL):
ALTER TABLE table MODIFY COLUMN del_thread INT; ALTER TABLE table MODIFY COLUMN del_limit INT;
修改前记得备份数据,确保字段内全是纯数字,没有非数值字符。
临时应急方案:强制转换为数值比较
如果暂时没法修改字段类型,查询时把两个字段强制转换成数值再比较也行:
SELECT * FROM table WHERE CAST(del_thread AS UNSIGNED) < CAST(del_limit AS UNSIGNED);
或者用更简洁的隐式转换(但可读性差,不推荐长期使用):
SELECT * FROM table WHERE del_thread + 0 < del_limit + 0;
内容的提问来源于stack exchange,提问作者Liambails1
相关产品推荐
相关产品推荐

