2013-05-11 58 views
1

我無法使用單引號選擇包含IN子句的值。 pid列是varchar(50)IN運算符未找到匹配項

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') 

第一個查詢返回數據,但第二個查詢不返回數據。

+0

down voter's please請添加評論。它將幫助 – 2013-05-11 18:15:59

+1

pid值是否填充了前導零?如果是這樣,那就可以解釋它。當您使用IN列表使用數字值時,它會隱式地將值(pid)轉換爲數字,從而消除前導零。 – mroach 2013-05-11 18:19:44

+0

是不是我downvoted。是否=現有ID中的一個工作?適用於我的sql-server 2012,所以只能假設一些奇怪的事情發生,例如奇怪的PID列上的索引,破錶(試試DBCC嗎?)或者這些值都不在表中。 – 2013-05-11 18:20:21

回答

1

一些實驗,我認爲表中的值在開始處有空格或零。

對於OP,您可以通過運行下面的查詢測試:

select * 
from t_tra_main 
where left(pid) in (' ', '0'); 

的SQL小提琴是here。代碼是:

create table t_tra_main (
    id int identity(1, 1), 
    pid varchar(50) 
); 

insert into t_tra_main(pid) 
    select '200000002' union all 
    select '0300000394' union all 
    select '0200000004' union all 
    select ' 200000001' union all 
    select ' 300000378' union all 
    select '300000393 ' union all 
    select '300000379 ' union all 
    select '200000003'; 

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')