2016-05-04 1 views
0

У меня есть столбец 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' 
+0

Это неверно синтаксис 'CASE' вообще. –

+0

Какая версия SQL Server? Может быть, 'FORMAT()' - это то, что вы ищете ... – Shnugo

+1

Стоит отметить, что SQL не имеет оператора case, он имеет выражение case. Управляет потоками контроля, а выражения возвращают значение. [Это ссылка] (https://msdn.microsoft.com/en-us/library/ms181765.aspx) к документам Microsoft, которые включают рабочие примеры. –

ответ

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 
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 < 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