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

时间:2016-09-15 19:28:09

标签: sql sql-server mssql-jdbc

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

  1. 从tbl_item中选择*,其中item_id介于1和100之间,按item_id
  2. 排序
  3. 从tbl_item中选择*其中item_id在'1'和'100'之间按item_id排序
  4. 由于item_id数据类型是varchar所以查询2似乎是正确的,但产生错误的结果。它仅列出item_id 1

    的项目

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

4 个答案:

答案 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