DATEPART IN SELECT CASE不工作

时间:2017-08-25 09:03:35

标签: sql-server tsql

以下代码的目标是,当有人在1月1日之后加入俱乐部时,将月数增加2。当我运行它时,我收到一条错误消息。

我对类似用法here的研究表明我的语法是正确的。在我的情况下,我做错了什么?

  

错误102:'<' .`

附近的语法不正确

这是完整的代码:

SELECT 
    ID, [HIREDate],
    CASE [HIREDate]
       WHEN 12 - (MONTH([HIREDate])) <> 0
          THEN 12 - (MONTH([HIREDate])) * 2
       ELSE 0
    END AS Days 
FROM 
    dbo.table 
WHERE
    column1 <> ''

1 个答案:

答案 0 :(得分:1)

你正在混合CASE表达式的两个“样式” - 试试这个:

SELECT 
    ID, [HIREDate],
    CASE 
       WHEN 12 - (MONTH([HIREDate])) <> 0
          THEN 12 - (MONTH([HIREDate])) * 2
       ELSE 0
    END AS Days 
FROM 
    dbo.table 
WHERE
    column1 <> ''

如果您在代码中CASE之后定义了一列:

CASE [HireDate]

然后WHEN子句包含 - 而不是表达式:

CASE MONTH([HireDate])
   WHEN 1 THEN ....
   WHEN 2 THEN .....

如果您需要在WHEN子句中包含表达式,那么无法CASE之后立即放置一列 - {{ 1}}子句需要拥有所有信息