在所有版本的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
语句的存在吗?
答案 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%]