【发布时间】:2013-05-11 18:12:08
【问题描述】:
我无法通过使用单引号的IN 子句选择值。 pid 列是varchar(50)。
select * from t_tra_main where pid in (200000002,300000394,200000004,
200000001,300000378,300000393,300000379,200000003)
select * from t_tra_main where pid in ('200000002','300000394','200000004',
'200000001','300000378','300000393','300000379','200000003')
第一个查询返回数据,但第二个查询没有。
【问题讨论】:
-
反对选民的请添加评论。它会有所帮助
-
pid 值是否用前导零填充?如果是这样,那就可以解释了。当您在 IN 列表中使用数值时,它会隐式地将值 (pid) 转换为数值,从而去除前导零。
-
投反对票的不是我。 = 现有 ID 之一是否有效?适用于我的 sql-server 2012,因此只能假设发生了一些奇怪的事情,例如PID 列上的奇怪索引、损坏的表(尝试 DBCC 吗?)或者这些值都不在表中。
-
@TonyHopkinson :这些记录存在于表中。我可以用第一个查询选择它。当 pid 包含字母数字值时出现问题,例如 M02000001
-
请在 sqlfiddle.com 上发布一个 repro。如果没有实际的表定义和证明问题的真实数据,则假设数据不是您所期望的,而且我们不是通灵者,因此我们无法告诉您出了什么问题。
标签: sql sql-server sql-server-2012 sql-server-2012-express