要在日期字段上使用的CASE语句

时间:2016-05-04 10:36:12

标签: tsql

我有一个列adetdate,其日期格式为'2015-05-01 00:00:00.000'

是否可以编写像

这样的案例陈述
case adetdate
adetdate  between '2015-05-01 00:00:00.000' and '2015-05-01 23:59:59.999' then print  'MAY 1st' 
adetdate  between '2015-05-02 00:00:00.000' and '2015-05-02 23:59:59.999' print  'MAY 2nd'  

2 个答案:

答案 0 :(得分:1)

如果正确理解。您可以将DATETIME列转换为DATE,在这种情况下,时间将被忽略。类似的东西:

PRINT CASE CAST(adetdate AS DATE)
         WHEN '2015-05-01' THEN 'MAY 1'
         WHEN '2015-05-02' THEN 'MAY 2'
         --........
      END AS Something

另一种更有活力的方法是在下面使用CONVERT

declare @datetime datetime = '2015-05-01 00:00:00.000'

select upper(convert(varchar(6), @datetime, 7))

<强>输出

将采用以下格式:

MAY 01

答案 1 :(得分:0)

也许是这样的通用方法:

SET LANGUAGE English
DECLARE @d DATETIME=GETDATE();
SELECT FORMAT(@d,'MMM d') + CASE DAY(@d)
                          WHEN 1 THEN 'st'
                          WHEN 2 THEN 'nd'
                          WHEN 3 THEN 'rd'
                          ELSE 'th' END

如果您使用的是SQL Server&lt; 2012,您可能会发现这有用:

DECLARE @d DATETIME=GETDATE();
SELECT UPPER(DATENAME(MONTH,@d)) + ' ' + CAST(DAY(@d) AS VARCHAR(2))
       + CASE DAY(@d)
         WHEN 1 THEN 'st'
         WHEN 2 THEN 'nd'
         WHEN 3 THEN 'rd'
         ELSE 'th' END