在我的选择中,我使用这样的语句添加第二个单元格(如果它不为空),并且如果单元格为空则将其清零。
Child.Tag + '@' + ISNULL(CONVERT(varchar(50),parent.Tag),'') as 'Location'
如果有父位置,则返回F123 @ A123的位置。 但是,如果没有父位置,它将返回F123 @,我希望它只返回F123。
我已将选择调整为:
Child.Tag + CASE Parent.Tag when null then '' else '@' end
但是,如果父位置为空,则仍会返回F123 @。
有没有人知道如何让它停止返回' @',如果有人解释为什么我的CASE声明不起作用,那么也会非常感激
谢谢。
(其他信息:我在SSMS 2008上)
答案 0 :(得分:6)
我想你想要这个:
Child.Tag + COALECE('@' + Parent.Tag, '')
仅当'@'
有值时才会添加Parent.Tag
。
简单case
的{{3}}是:
- 评估input_expression,然后按照指定的顺序,为每个WHEN子句计算input_expression = when_expression。
NULL
未通过相等测试。这很微妙,但无论如何COALESCE()
形式更容易阅读和写作。
答案 1 :(得分:3)
正如Gordon所说,CASE Parent.Tag when null
永远不会评估为真,即使Parent.Tag
为NULL - 但CASE when Parent.Tag is null
将评估为真{{1} }是NULL。
所以你可以将你现有的表达式从CASE 表达式 WHEN 值 ...表单改写为CASE WHEN 表达式是真的 ...形式,如此:
Parent.Tag