2016-03-22 2 views
-6

Я хочу, чтобы отсортировать значения столбца (DateTime) о состоянии (и событие имело место до March 1st 2016 как 'Preseason',SQl сазе

события, наступившего после march 31st 2016 как 'PostSeason' Else 'Season'. --query --- Выбор EVENTDATE = Case Когда EVENTDATE < '01 -03-2016' , затем 'предсезонного' Когда EVENTDATE> '31 -03-2016' , затем '' постсезон
Else 'Сезон' End, EventName От tblEvent

--error Сообщение 'Msg 242, Преобразование типа VARCHAR данных в тип данных даты и времени привело к стоимости из-за границы диапазона.

+2

Что вы пробовали? –

+0

Эта ошибка говорит мне, что ваш столбец DateTime имеет значения, отличные от даты. Может быть, вы могли бы попробовать CASTing в своем заявлении CASE? –

+0

Вы не думали, что публикация фактического утверждения будет полезной? – Paparazzi

ответ

0

- ОК, Был ли формат даты. Я использовал европейский формат даты (dd-mm-yyyy) в моем запросе, но используемая система использует формат даты в США (mm-dd-yyyy), поэтому мой запрос не удался. **

  • Решение

** Выберите Cast (Case Когда EVENTDATE < = '01/01/2016' , затем 'предсезонного' Когда EVENTDATE> = '12/31/2016 ', затем 'постсезон'
Else 'Сезон' End Как Varchar (25)), как сезон, EventName От tblEvent

Спасибо за поддержку !!!!

0

Что-то вроде ..

ORDER BY 
    CASE 
    WHEN ISDATE(DateTime) = 1 THEN 
    CASE DateTime 
     WHEN <= '2016-03-01' THEN 1 -- Preseason 
     WHEN >= '2016-03-31' THEN 3 -- PostSeason 
     ELSE 2 END     -- Season 
    ELSE 4 END,      -- Not a date, figure out how to handle 
    DateTime 
+0

ОК, спасибо за ответ и указав, на что я действительно должен смотреть, - как справиться с конфликтом типа данных в инструкции case. –

Смежные вопросы