【问题标题】:IIF statement in SQL Server 2005SQL Server 2005 中的 IIF 语句
【发布时间】:2010-12-07 08:58:20
【问题描述】:

IIF 语句是否存在于所有版本的 SQL Server 中?

我查看了MSDN 上的教程。

但是当我试图在我的机器上运行这段代码时

DECLARE @newDate datetime
SET @newDate =  CONVERT(varchar, {fn NOW()}, 111)
SELECT IIF(@newDate > '2010/12/2', 'Greater', 'smaller')

但我收到“'>' 附近的语法错误”的错误。

有人可以为我提供一个 SQL Server 2005 中存在 IIF 语句的示例吗?

【问题讨论】:

    标签: sql-server sql-server-2005 iif


    【解决方案1】:

    IIF 语句仅存在于 MDX - SQL Server 的查询语言 Analysis Services - SQL Server 的数据仓库端。

    普通 T-SQL没有IIF 语句。

    您可以在 T-SQL 中做的最好的事情是使用 CASE.... WHEN... THEN... 语句。

    【讨论】:

    • 更新:SQL Server 2012 现在有一个 IIF 语句。 msdn.microsoft.com/en-us/library/hh213574.aspx
    • @Somantra:是的——但这在 2010 年 12 月并不为人所知,OP 询问的是 SQL Server 2005。
    • 标题说的是 2005 年,但他的第一个问题是“所有版本的 SQL Server 中是否存在 IIF 语句?”。希望将来有人能在这篇文章中找到有用的东西。 ;-)
    【解决方案2】:

    最好使用CASE 表达式:

    DECLARE @newDate datetime
    SET @newDate =  CONVERT(varchar, {fn NOW()}, 111)
    SELECT CASE WHEN @newDate > '20101202' THEN 'Greater' ELSE 'smaller' END
    

    另请注意,我已将您的日期文字转换为安全格式 - SQL Server 可以将“2010/12/2”解释为 2 月 12 日或 12 月 2 日。

    【讨论】:

      【解决方案3】:
         IIF([Add DVP Month].DevelopmentMonth>[Add DVP Month].COVMONTHS,
             1,
         IIF([STATUS]<>'1',
             1, 
         IIF([Add DVP Month].PLANTYPE = 'A' and [Add DVP Month].newUsedProgram = 'U' and [Add DVP Month].COVMONTHS = 60 and [Add DVP Month].COVMILES = 100000 and [Add DVP Month].postedDt >= #1/31/2010#,
         IIF([Add DVP Month].postedDt >= #1/31/2012#, 
             [EPMthd.PCM2],   
         IIF([Add DVP Month].postedDt >= #1/31/2010#, 
         [EPMthd.PCM1], 
         [EPMthd.PCM0])
         ),
         IIF([Add DVP Month].COVMONTHS = 999,[EPMthd.2],
         IIF([Add DVP Month].postedDt >= #1/31/2012#, [EPMthd.2],
         IIF([Add DVP Month].postedDt >= #1/31/2010#, [EPMthd.1],
         IIF([Add DVP Month].postedDt >= #1/31/2008#, 
         IIF([EPMthd.0] is null, 
             [EPMthd.8], 
             [EPMthd.0]
            ),
         IIF([Add DVP Month].postedDt < #1/31/2008#, 
         IIF([EPMthd.8] is null, 
         IIF([Add DVP Month].COVMONTHS = 0,0, 
             [Add DVP Month].DevelopmentMonth/[Add DVP Month].COVMONTHS
            ),
             [EPMthd.8]
          ),
         IIF([Add DVP Month].COVMONTHS = 0,
         0, 
             [Add DVP Month].DevelopmentMonth/[Add DVP Month].COVMONTHS
          )
         )
       ))))))
       ) AS [EP%]
      

      【讨论】:

      • 这只是一个垃圾帖。
      • 同意。这不是所要求的,与 SQL Server 的语法完全不同
      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 1970-01-01
      • 2011-08-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-17
      • 2016-06-10
      • 1970-01-01
      相关资源
      最近更新 更多