Sql server 文本字段为空时的SQL情况无效
我尝试在SQL中运行以下case语句:Sql server 文本字段为空时的SQL情况无效,sql-server,null,conditional,case,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 A
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条件
有什么建议吗?试试这个,让我们知道会发生什么
'http://www.toolboxbarn.com/v/vspfiles/photos/'+
COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,
在这里使用coalesce比case语句更好。一些平台可以优化coalesce,让您轻松地设置默认值。试试这个,让我们知道会发生什么
'http://www.toolboxbarn.com/v/vspfiles/photos/'+
COALESCE(P.Photos_Cloned_From,P.ProductCode,'DEFAULT')+'-2T.jpg'
AS image_link,
在这里使用coalesce比case语句更好。有些平台可以优化coalesce,它可以让您轻松地创建默认值。@hogan的建议对于保存代码来说是一个很好的建议,但如果您不引入他的新“默认”案例,它最终应该具有与您的案例陈述相同的结果。
ProductCode
很可能也是NULL
这是可能的吗
为什么string+NULL=NULL
因为NULL在sql中是未知的,所以大多数数据库平台在聚合或连接NULL时会将整个值置零
因此,请考虑以下测试用例:
Id ProductCode Photos_Cloned_From
1 1 ClonedFrom
2 2 Null
3 NULL Null
您的案例表达和Hogan建议的结果是:
1) 否则“
2) 当“
3) WHEN NULL@hogan的建议是保存代码的好方法,但如果不引入新的“default”case,它最终应该与您的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) 否则“
2) 当“
3) 当NULL时当您说“不返回THEN条件”时,您的意思是记录中返回的值不正确,还是完全丢失?请用您使用的数据库标记您的问题。可能不是NULL,而是一个空字符串?Matt、Hogan和Mansoor。非常感谢你的帮助。我想出来了。没有代码问题。我的用户告诉我所有的记录都完成了……但当我开始分析数据库时,这是不正确的。使用原始代码,现在一切都正常了……但我确实从你们每个人身上学到了一些东西。再次感谢!!当你说“不返回THEN条件”时,你的意思是记录中返回的值不正确,还是完全丢失了?请用你正在使用的数据库标记你的问题。可能它不是null,只是一个空字符串?Matt、Hogan和Mansoor。非常感谢你的帮助。我想出来了。没有代码问题。我的用户告诉我所有的记录都完成了……但当我开始分析数据库时,这是不正确的。使用原始代码,现在一切都正常了……但我确实从你们每个人身上学到了一些东西。再次感谢!!我喜欢这个建议,但最终它应该是相同的结果时,空的情况下,然后。。。其他的与COALESCE(THEN,ELSE)相同@Matt-no我在第二个选项后有一个默认值,因此这将修复“均为null”OP的代码有问题,我相信我们都认为这是问题所在。true没有考虑您的“默认”,因为这会给OP添加一个新的案例,这可能是需要的,也可能不是需要的,但正如您所说,将消除空值,这可能是问题的原因。我喜欢这个建议,但最终结果应该和空的情况相同,然后。。。其他的与COALESCE(THEN,ELSE)相同@Matt-no我在第二个选项后有一个默认值,因此这将修复“均为null”OP的代码有问题,我相信我们都认为这是问题所在。true没有考虑您的“默认”,因为这会给OP添加一个新的案例,这可能是需要的,也可能不是需要的,但正如您所说,将消除空值,这可能是问题的原因。请再次查看我的答案,我没有失败的空值,空格。@Hogan true我做了,我只是快速阅读,我确实更新了我的答案,说明如果新的“默认值”未包含,结果将是相同的。请再次查看我的答案,我没有通过空格,空格。@Hogan true我做了,我只是快速阅读,我确实更新了我的答案,说明如果新的案例“默认”未包括在内,结果将是相同的