如何编写包含日期范围的case语句

时间:2017-11-24 19:57:12

标签: sql sql-server

我正在尝试根据日期时间值返回季度。

我收到以下脚本的错误:

  

导致将varchar数据类型转换为日期时间数据类型   在超出范围的价值。

DECLARE @d AS DATETIME
SET @d = GETDATE()

SELECT CASE 
        WHEN @d BETWEEN '2017-01-01' AND '2017-03-31' THEN 'Q1'
        WHEN @d BETWEEN '2017-04-01' AND '2017-06-31' THEN 'Q2'
        WHEN @d BETWEEN '2017-07-01' AND '2017-09-31' THEN 'Q3'
        WHEN @d BETWEEN '2017-10-01' AND '2018-12-31' THEN 'Q4'
        ELSE 'Q?'
        END

使用单个“WHEN”子句似乎可以正常工作,但是使用4则会出错。

是什么原因?

3 个答案:

答案 0 :(得分:4)

你有一个内置的方法:

SELECT DATEPART(QUARTER, @d)

答案 1 :(得分:1)

错误是因为六月和九月只有30天,但你要求他们的第31天。

另外,你的最后一次发言是一年假。

答案 2 :(得分:0)

2017-06-31没有这样的日期。应该是2017-06-30。