【发布时间】:2016-09-15 19:28:08
【问题描述】:
我有一个表 tbl_item,其中 item_id 是 varchar。当我使用下面的查询 1 得到不同的结果。
- select * from tbl_item where item_id 介于 1 到 100 之间,按 item_id 排序
- select * from tbl_item where item_id between '1' and '100' order by item_id
由于 item_id 数据类型是 varchar,所以查询 2 似乎是正确的,但会产生错误的结果。它只列出 item_id 为 1 的项目
为什么结果会出现这种差异?
【问题讨论】:
-
应该返回“1”、“10”和“100”。但是为什么你将 id 存储在 varchar 列中?!?整数有什么问题?
-
这是因为当您将数字存储为字符串时,您将通过字符串的排序方式进行排序和逻辑检查。在您的第一个查询中,您将获得到 int 的隐式转换,因此结果可能是您所期望的。以正确的数据类型存储您的数据,此问题会自行解决。
-
@jarlh ......在示例中,我使用项目 ID 作为 1 和 100,但实际上它可能类似于 11234xyz
标签: sql sql-server mssql-jdbc