2011-07-14 40 views
2

,VARCHAR值ISNULL,COALESCE如何使用ISNULL爲int值的函數

select Complaint.complaintProfileId,ISNULL(T2.MMB_id,'Notfound') as MMBId 
from complaints c join T2.. 
on T2.sno = c.sno 

該查詢給我一個錯誤

Conversion failed when converting the varchar value 'Notfound' to data type int. 
MMB_id is a int 

感謝 孫

回答

0

這取決於你想要返回,如果你想要文本「未找到」,那麼你可以通過CASE聲明SELECT進行以下操作:

select Complaint.complaintProfileId, 
    CASE 
     WHEN T2.MMB_id is not null Then T2.MMB_id 
     ELSE 'Not Found' 
    END as MMBId 
from complaints c join T2.. 
on T2.sno = c.sno 

由於MMD_IDint你也可以執行下列操作以返回int

select Complaint.complaintProfileId, IsNull(T2.MMB_id, 0) as MMBId 
    from complaints c join T2.. 
    on T2.sno = c.sno 

這取決於根據您的需要你。

0

使用它像

select Complaint.complaintProfileId,ISNULL(T2.MMB_id,0) as MMBId from complaints c join T2 on T2.sno = c.sno 
3

試試你INT列轉換爲varchar,

SELECT Complaint.ComplaintProfileId, ISNULL(CONVERT(varchar(11), T2.MMB_id), 'Notfound') AS MMBId 
FROM complaints c join T2.. 
ON T2.sno = c.no 
0

對於ISNULL,第一值確定表達和第二值的數據類型被轉換爲第一個表達式的類型。所以它試圖將你的varchar轉換爲int。我認爲COALESCE採用了COALESCE中所有表達式的最高優先級的數據類型,我認爲在這種情況下它仍然是int。所以無論哪種方式,我認爲你需要將int轉換爲varchar。