Как изменить дату и время в datetime в SQL - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь установить время и дату в своем запросе на основе одного из следующих условий:

  1. если время в MyDate <9:00, то установить время на 9: 00 </li>
  2. Если время в 9:00
  3. Если время MyDate> 15:00, то установите время на 9:00 и день на день + 1.

У меня есть два первых условия, и они отлично работают, но не могут объединить изменения как времени, так и даты.Как я могу это сделать?

Приведенный ниже код отлично работает для двух первых условий!

Case When cast(MyDate as TIME) < '09:00:00' Then DATEADD(Hour, 9, CAST(CAST(PayoutDtApplication As Date) As Datetime)) 

Case When cast(MyDate as TIME) < '09:00:00' Then DATEADD(Hour, 9, CAST(CAST(PayoutDtApplication As Date) As Datetime))

Спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Это предположение, основанное на следующем комментарии:

это число может варьироваться в зависимости от данных, которые я получаю, просто хочу сказать, что мне нужно установить время 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 сейчас.

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