当文本字段无效时,SQL情况



我正在尝试在sql中运行以下案例语句:

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的项目,该语句不会返回当时的条件。

有什么建议?

尝试一下,让我们知道会发生什么。

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

在这里使用Cocece比案例声明要好。有些平台可以优化凝聚力,它使您可以轻松地制作默认值。

@hogan的建议是保存代码的好建议,但是如果您不介绍他的新"默认"案例,则最终应该与您的案例语句相同。ProductCode很可能也是NULL是可能的吗?

为什么string + NULL = NULL因为NULL是SQL中未知的,大多数DB平台将在汇总或串联时将整个值无效。

因此,请考虑以下测试用例:

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

您的案例表达的结果和霍根的建议是:

1)其他'http://www.toolboxbarn.com/v/vspfiles/photos/photos/clonedfrom-2t.jpg'

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

3)null

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,
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

最新更新