我有一个我无法修改的数据库,它包含在varchar(255)field1的table1中,是一个32位整数值。
我对所述表的最后十个或类似记录感兴趣,其中整数小于给定的参数值。
运行下一个sql语句几乎可以工作:
echo 'select field1 from table1 where field1 < 123456 order by field1;'|mysql
问题是field1包含像
这样的值123450
123453
回答选择,但也是
之类的值12344
12345
也符合条件,因为使用了排序顺序和方法(用字符串排序?)。
问题当然是缺少前导零,我无能为力。
以纯sql查询方式解决此问题的最佳方法是什么?由于最终解决方案中存在时间限制,我更倾向于每个参数进行一次查询。
答案 0 :(得分:1)
您可以通过将其视为数字来转换该值。这是一个简单的方法:
select field1
from table1
where field1 + 0 < 123456
order by field1 + 0;
+ 0
执行“静默转换”。如果字符串不是数字,则返回0.转换仅适用于字符串中的前导数字。
通常,最好使用正确的类型。如果该字段包含非数字值,您可能需要:
where field1 + 0 < 123456 and
field1 + 0 > 0