SQL сравнить столбец даты и времени с указанным c часовым и минутным диапазоном времени - PullRequest
0 голосов
/ 09 апреля 2020

Мне нужно написать заявление CASE, как показано ниже;

Datetime столбец: '2020-04-09 08:34:00.000'

Меня не волнуют части года, месяца, дня. Просто хочу сравнить часы и минуты с указанными c часами и минутами.

Если hh:mm частей значения datetime между '05:30' и '15:30' Тогда 1

Если hh:mm части datetime значения между '15:31' и '05:29' Тогда 2

Как мне этого добиться?

Ответы [ 4 ]

1 голос
/ 09 апреля 2020

Вы можете попробовать что-то вроде этого.

SELECT
   CASE   
      WHEN CONVERT(TIME, YourDateTime) >= '05:30:00' AND CONVERT(TIME, YourDateTime) < '15:30:00' THEN 1   
      WHEN CONVERT(TIME, YourDateTime) >= '15:30:00' OR CONVERT(TIME, YourDateTime) < '05:30:00' THEN 2      
   END ColumnName
FROM XYZ_TABLE
0 голосов
/ 09 апреля 2020

Я решил сам, я думаю;

DECLARE @StartDate DATETIME

SET @StartDate = '2020-04-09 16:30:00.000'

Select CASE WHEN CAST(CAST(DATEPART(HH,@StartDate)as varchar)+':'+CAST(DATEPART(mi,@StartDate)as varchar)+':'+CAST(DATEPART(ss,@StartDate) as varchar) as time(0)) between CAST('05:30:00' AS time(0)) and CAST('15:29:59' AS time(0)) THEN 1 ELSE 2 END

Спасибо за все ответы.

0 голосов
/ 09 апреля 2020

Следующее использование вернет время и час.

  SELECT CONVERT(VARCHAR(5),getdate(),108)  AS HourMinute

+------------+
| HourMinute |
+------------+
| 12:33      |
+------------+

Итак, вы можете использовать следующую реализацию CASE:

РЕДАКТИРОВАНИЕ:

   SELECT
CONVERT(VARCHAR(5),YourDateTime,108) ,
   CASE   
      WHEN CONVERT(time,YourDateTime,108)  >=  '05:30' AND  CONVERT(time,YourDateTime,108) < '15:30' THEN 1   
       WHEN CONVERT(time,YourDateTime,108)  >=  '15:30' OR  CONVERT(time,YourDateTime,108) < '05:30' THEN 2   
   END CaseResult
FROM YourTable
0 голосов
/ 09 апреля 2020

Просто простой запрос как

select *, case when v >= '08:30' and v <= '15:30' then 1 else 2 end
from
(
  values
  (cast('2020-04-09 08:34:00' as time))
) t(v)
...