SQL Server 2005中的IIF语句

时间:2010-12-07 08:58:20

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

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

我已经查看了MSDN上的教程。

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

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

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

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

3 个答案:

答案 0 :(得分:11)

IIF语句仅存在于 MDX 中 - SQL Server的查询语言分析服务 - SQL Server的数据系统端。

普通T-SQL IIF语句。

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

答案 1 :(得分:6)

最好使用CASE表达式:

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

另请注意,我已将日期文字切换为安全格式 - “2010/12/2”可由SQL服务器解释为2月12日或12月2日。

答案 2 :(得分:-1)

   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%]