将IIF转换为CASE(SQL Server 2012)

时间:2016-06-29 19:16:21

标签: sql sql-server-2012

这是关于从IIF转换为CASE的第二个问题。

让我与IIF混淆的是当其中一个条件成为第二个IIF时。当IIF代码中出现这种情况时,我无法理解是否需要将其作为另一个WHEN,或者我需要启动嵌套CASE

这是需要转换的IIF语句。

IIF(([FirstPublicationDate] IS NULL), IIF(([PublicationDate] IS NULL), GETDATE(), [PublicationDate]), [FirstPublicationDate])

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

制作树形图:

                                                --- GETDATE() 
                                        (null) /
                                              /
                        --- PublicationDate - 
                (null) /                      \
                      /                        \
FirstPublicationDate -                          --- PublicationDate
                      \
                       \
                        --- FirstPublicationDate

很明显,如果IIF语句不为空,则FirstPublicationDate语句要返回PublicationDate;然后是GETDATE(),最后是COALESCE。您可以将其缩短为一个更易读的SELECT COALESCE(FirstPublicationDate, PublicationDate, GETDATE()) 语句:

geom_path

答案 1 :(得分:0)

可以使用嵌套的CASE语句编写相同的IIF:

SELECT CASE WHEN [FirstPublicationDate] IS NULL THEN
         CASE WHEN [PublicationDate] IS NULL THEN GETDATE() ELSE [PublicationDate] END
       ELSE [FirstPublicationDate] END

答案 2 :(得分:0)

这是你的IIF的非嵌套等价物,它更加红色

SELECT CASE 
  WHEN FirstPublicationDate IS NOT NULL THEN FirstPublicationDate
  WHEN PublicationDate      IS NOT NULL THEN PublicationDate 
  ELSE GETDATE() 
END

但是即使在大多数时候你都拥有强大而简单的选择:

SELECT COALESCE(FirstPublicationDate, PublicationDate, GETDATE())

您可以阅读coalesce here,其中包括与case的比较

相关问题