我有一个表tbl_item,其中item_id是varchar。当我使用下面的查询1得到不同的结果。
由于item_id数据类型是varchar所以查询2似乎是正确的,但产生错误的结果。它仅列出item_id 1
的项目为什么结果会出现这种差异?
答案 0 :(得分:1)
字符串比较与整数比较不同。例如,这是前100个数字作为字符串排序时的外观:
1
10
100
11
12
. . .
between
也发生了同样的事情。因为常量周围有单引号,所以数据库引擎决定你的意思是字符串。因此,它将值解释为字符串。
据推测,第一种是表达查询的正确方法。如果值是数字,则使用数字进行比较。
答案 1 :(得分:0)
尝试下一步方法:
SELECT * FROM tbl_item WHERE item_id BETWEEN 1 AND 100 ORDER BY item_id::INT
答案 2 :(得分:0)
试试这个:
select * from tbl_item where item_id between 1 and 100 order by cast(item_id as int)
答案 3 :(得分:0)
谢谢大家的帮助。我找到了完成这项工作的正确方法。下面的查询最初提出了一些问题,不知道为什么,但现在它有效。
select * from tbl_item where item_id>='1' and item_id<='100' order by item_id