TSQL CASE当id.id为null然后''别的' @'结束

时间:2015-10-08 14:23:07

标签: sql sql-server sql-server-2008 tsql

在我的选择中,我使用这样的语句添加第二个单元格(如果它不为空),并且如果单元格为空则将其清零。

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上)

2 个答案:

答案 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