根据数据类型获取不同的结果集
Getting different resultset based on data type
我有一个 table tbl_item,其中 item_id 是 varchar。当我使用下面的查询时 1 得到不同的结果。
- select * 来自 tbl_item 其中 item_id 在 1 到 100 之间按 item_id
排序
- select * 来自 tbl_item 其中 item_id 在“1”和“100”之间 按 item_id
排序
因为 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
我有一个 table tbl_item,其中 item_id 是 varchar。当我使用下面的查询时 1 得到不同的结果。
- select * 来自 tbl_item 其中 item_id 在 1 到 100 之间按 item_id 排序
- select * 来自 tbl_item 其中 item_id 在“1”和“100”之间 按 item_id 排序
因为 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