日期:2014-05-17  浏览次数:20553 次

MS-SQL中,在CASE判断时能否将int类型转换为Varchar类型
在表中,Total 是int类型,但在判断时,如果Total为空,我需要让其显示为‘未质检’。
请问可以怎么做?

SELECT ServiceListID
,Duration
,PhoneSTime
,QI.SubTime
,(CASE WHEN QI.Total IS NULL THEN '未质检' ELSE QI.Total END) AS Total
,QI.SecondTotal
,QI.Pass  
FROM ServiceList SL LEFT JOIN QuaInfo QI ON SL.ServiceListID = QI.OrderID;


执行后提示:Conversion failed when converting the varchar value '未质检' to data type int.

------解决方案--------------------
SELECT ServiceListID         ,Duration         ,PhoneSTime         ,QI.SubTime         ,(CASE WHEN QI.Total IS NULL THEN '未质检' ELSE LTRIM(QI.Total) END) AS Total         ,QI.SecondTotal         ,QI.Pass   FROM ServiceList SL LEFT JOIN QuaInfo QI ON SL.ServiceListID = QI.OrderID; 



------解决方案--------------------
那就要把数值与字符类型统一了
SELECT ServiceListID
        ,Duration
        ,PhoneSTime
        ,QI.SubTime
        ,(CASE WHEN QI.Total IS NULL THEN '未质检' ELSE convert(nvarchar(50),QI.Total) END) AS Total
        ,QI.SecondTotal
        ,QI.Pass  
FROM ServiceList SL LEFT JOIN QuaInfo QI ON SL.ServiceListID = QI.OrderID;
------解决方案--------------------
case when 中可以使用convert/cast来转换类型。