6

语句是否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语句的示例吗?

4

3 回答 3

11

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

普通T-SQL 没有语句IIF

在 T-SQL 中你能做的最好的事情就是使用CASE.... WHEN... THEN...语句。

于 2010-12-07T09:00:44.433 回答
6

你最好使用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 日。

于 2010-12-07T09:02:27.300 回答
-2
   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%]
于 2013-11-06T04:33:13.283 回答