Что такое синтаксис T-SQL для классификации записей на основе дня и месяца переменной datetime? - PullRequest
0 голосов
/ 24 сентября 2018

Я использую SQL Server 2014, и мне нужно добавить следующую логику в оператор CASE:

, если переменная StayDate находится между 22 декабря и 31 декабря, а затем классифицировать как '1';если это период с 1 января по 6 января, тогда классифицируйте как '2', иначе как '0'

StayDate имеет тип данных datetime (пример: 2017-12-15 00:00:00.000).

Как мне написать эту логику в CASE выражении?

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018
 SELECT
      CASE WHEN StayDate between '2018-12-22' and '2018-12-31' THEN 1 
           WHEN StayDate between '2019-01-01' and '2018-01-06' THEN 2 
           ELSE 0 
      END as clasification
 FROM YourTable
0 голосов
/ 24 сентября 2018

Похоже, вам плевать на год, когда вы хотите, чтобы это работало с данными, которые могут охватывать несколько лет.Имея это в виду:

select  case when month(staydate) = 12 and day(staydate) >= 22 then 1
             when month(staydate) = 1 and day(staydate) <= 6 then 2
             else 0 end
0 голосов
/ 24 сентября 2018

используйте случай, как показано ниже, если вам нужны два отдельных столбца

  select case when StayDate between '2018-12-22' and '2018-12-31' then 1 end as  classification_01
    case when StayDate between '2019-01-01' and '2018-01-06' then 2 end  as classification_02 from t

, но если вам нужен только столбец классификации, он будет выглядеть так, как показано ниже

select case when StayDate between '2018-12-22' and '2018-12-31' 
      then 1 
    case when StayDate between '2019-01-01' and '2018-01-06' 
   then 2 else null 
  end  as clssification from t

Примечание если вам просто нужно сравнение месяцев, следуйте @joel Solution

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...