Это предположение, основанное на следующем комментарии:
это число может варьироваться в зависимости от данных, которые я получаю, просто хочу сказать, что мне нужно установить время 9:00 и день + 1 для всех дат, которые я получаю. У меня разные даты.
Я догадываюсь , что независимо от времени ОП хочет изменить значение на следующую дату в 09: 00: 00.
Если это так, то одним из способов добиться этого будет:
SELECT DATEADD(HOUR, 33, CONVERT(date,YourDateColumn)) AS NewDate
FROM YourTable;
Опять же, это догадки. Если ОП уточнит, я буду рад расширить свой ответ или удалить его, если он не имеет значения.
Редактировать: на основе новой логики ОП от их редактирования:
CREATE TABLE #Sample (YourDate datetime2(0));
INSERT INTO #Sample
VALUES ('2018-05-09T08:57:00'),
('2018-05-09T14:26:37'),
('2018-05-09T19:24:01');
GO
SELECT YourDate,
CASE WHEN CONVERT(time, YourDate) < '09:00:00' THEN DATEADD(HOUR,9,CONVERT(datetime2(0),CONVERT(date,YourDate)))
WHEN CONVERT(time, YourDate) > '15:00:00' THEN DATEADD(HOUR,33,CONVERT(datetime2(0),CONVERT(date,YourDate)))
ELSE DATEADD(HOUR,15,CONVERT(datetime2(0),CONVERT(date,YourDate))) END AS NewDate
FROM #Sample;
GO
DROP TABLE #Sample;
Двойной CONVERT
(CONVERT(datetime2(0),CONVERT(date...
) связан с тем, что тип данных date
не совместим с DATEADD(HOUR...
. Я использовал datetime2
, так как это должно быть использовано над datetime
сейчас.