根据数据类型获取不同的结果集

Getting different resultset based on data type

我有一个 table tbl_item,其中 item_id 是 varchar。当我使用下面的查询时 1 得到不同的结果。

  1. select * 来自 tbl_item 其中 item_id 在 1 到 100 之间按 item_id
  2. 排序
  3. select * 来自 tbl_item 其中 item_id 在“1”和“100”之间 按 item_id
  4. 排序

因为 item_id 数据类型是 varchar 所以查询 2 似乎是正确的但产生了错误的结果。它只列出 item_id 1

的项目

为什么结果会出现这种差异?

字符串比较与整数比较不同。例如,这是前 100 个数字按字符串排序时的样子:

1
10
100
11
12
. . .

between 也发生了同样的事情。因为常量周围有单引号,所以数据库引擎确定您真正指的是字符串。因此,它将值解释为字符串。

据推测,第一个是表达查询的正确方式。如果值是数字,则使用数字进行比较。

尝试下一种方法:

SELECT * FROM tbl_item WHERE item_id BETWEEN 1 AND 100 ORDER BY item_id::INT

试试这个:

select * from tbl_item where item_id between 1 and 100 order by cast(item_id as int)

感谢大家的帮助。我找到了完成这项工作的正确方法。下面的查询最初给出了一些问题,不知道为什么但现在可以了。

select * from tbl_item where item_id>='1' and item_id<='100' order by item_id