Обратите внимание, что ниже приведено для MySQL (неверный тег вопроса) - решение SQL Server находится ниже этого ответа
Этого можно добиться, выбрав HOUR
из start_time
и затем с помощью оператора CASE
:
SELECT start_time,
CASE
WHEN start_hour < 6 THEN 'Q1'
WHEN start_hour < 12 THEN 'Q2'
WHEN start_hour < 18 THEN 'Q3'
ELSE 'Q4'
END AS `time`
FROM (
SELECT start_time,
HOUR(start_time) AS start_hour
FROM MyTable
) a
Выходы:
start_time time
2019-06-19T02:10:53Z Q1
2019-07-24T02:00:05Z Q1
2019-07-31T07:24:44Z Q2
2019-08-11T16:52:24Z Q3
В качестве альтернативы, вы можете использовать простой математический бит для достижения того же:
SELECT start_time,
CONCAT('Q', FLOOR(HOUR(start_time) / 6 + 1)) AS `time`
FROM MyTable
Это просто делит HOUR
из start_time
на 6, добавляет 1 (так что вы не получаете Q0
) и использует FLOOR
, чтобы уменьшить его до ближайшего целого числа.
MySQL sqlfiddle
РЕДАКТИРОВАТЬ После обсуждения неправильной метки СУБД
После осознания того, что вы фактически используете SQL Server вместо MySQL, найдите следующеекоторый достигнет того же в SQL Server:
SELECT start_time,
CONCAT('Q', FLOOR(DATEPART(HOUR, start_time) / 6 + 1)) AS [time]
FROM MyTable
Вывод:
start_time time
2019-06-19T02:10:53Z Q1
2019-07-24T02:00:05Z Q1
2019-07-31T07:24:44Z Q2
2019-08-11T16:52:24Z Q3
SQL Server sqlfiddle