SQL CASE文本字段为NULL时无法正常工作

时间:2016-11-25 20:54:17

标签: sql-server null conditional case

我正在尝试在SQL中运行以下case语句:

CASE 
    WHEN P.Photos_Cloned_From IS NULL
        THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg'
        ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg'
    END AS image_link,

语句有效,但仅适用于那些非NULL的记录。对于NULL项,语句不返回THEN条件。

有什么建议吗?

4 个答案:

答案 0 :(得分:1)

试试这个,让我们知道会发生什么。

'http://www.toolboxbarn.com/v/vspfiles/photos/'+
    COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,

在这里使用coalesce比case语句更好。有些平台可以优化合并,它可以让您轻松制作默认值。

答案 1 :(得分:1)

@hogan的建议是一个很好的保存代码,但如果你没有引入他的新“默认”案例,它最终应该与你的case语句具有相同的结果。 ProductCode很可能NULL也是可能的吗?

为什么string + NULL = NULL因为NULL在sql中是未知的,大多数数据库平台会在聚合或连接null时使整个值无效。

请考虑以下测试用例:

Id   ProductCode    Photos_Cloned_From
1    1               ClonedFrom
2    2               Null
3    NULL            Null

你的案例表达和Hogan建议的结果将是:

1)ELSE'http://www.toolboxbarn.com/v/vspfiles/photos/ClonedFrom-2T.jpg'

2)当'http://www.toolboxbarn.com/v/vspfiles/photos/2-2T.jpg'

3)WHEN NULL

答案 2 :(得分:0)

CASE WHEN ISNULL(P.Photos_Cloned_From,'') = '' THEN 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.ProductCode+'-2T.jpg'
    ELSE 'http://www.toolboxbarn.com/v/vspfiles/photos/'+P.Photos_Cloned_From+'-2T.jpg'
END AS image_link,

答案 3 :(得分:0)

SELECT 
   F.Name
 , F.Address
 , F.InDate
 , ( CASE WHEN (F.Date_Down IS NULL and F.Cod_Down = 0 )THEN 0 ELSE -1 END) as 'sn_Down'
FROM
   Folders F