Оператор IIF в SQL Server 2005 - PullRequest
6 голосов
/ 07 декабря 2010

Существует ли оператор 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?

Ответы [ 3 ]

11 голосов
/ 07 декабря 2010

Этот оператор IIF существует только в MDX - языке запросов для SQL Server Analysis Services - стороне хранилища данных SQL Server.

Обычный T-SQL не имеет оператор IIF.

Лучшее, что вы можете сделать в T-SQL, это использовать оператор CASE.... WHEN... THEN....

6 голосов
/ 07 декабря 2010

Вам лучше использовать выражение 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 как 12 февраля или 2 декабря.

0 голосов
/ 06 ноября 2013
   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%]
...