Код SQL Server для добавления времени к дате, если по истечении определенного времени - PullRequest
0 голосов
/ 07 сентября 2018

Я НОВИНКА для кодирования SQL Server, поэтому, пожалуйста, будьте добры.

Я пытаюсь посмотреть на столбец, и если время после 11:00, тогда мне нужно добавить 1 день к дате и отобразить новую дату. Если до 11 утра не нужно добавлять день, а просто показать дату.

Как вы можете видеть на рисунке, «Дата FDP» добавляет день независимо от того, сколько времени он показывает (IE: строки 3 и 4). Как будто время до 11 утра, шоу не добавляется.

Пожалуйста, дайте мне знать, если вы можете помочь.

Заранее спасибо, Brian

Код:

SELECT 
    [ReceiptDate],
    [DeptRcptDate],
    CASE 
       WHEN DeptRcptDate >= '11:00:00' 
          THEN DATEADD (DAY, 1, DeptRcptDate)
       WHEN DeptRcptDate < '11:00:00' 
          THEN (DeptRcptDate)
       ELSE 'Unknown'
    END AS "FDP Date",
    [OutcomeLtrDate],
    CASE 
       WHEN OutcomeLtrDate >= '16:00:00' 
          THEN (OutcomeLtrDate) + 1
       WHEN OutcomeLtrDate < '16:00:00' 
          THEN (OutcomeLtrDate)
       ELSE 'Unknown'
    END AS "LDP Date"

Изображение (того же) кода.

Ответы [ 3 ]

0 голосов
/ 07 сентября 2018

Вы сверяете дату и время со строкой, содержащей время. Я не удивлен, что это дает неожиданные результаты.

Получите часть времени вашего datetime с datepart () и сравните это.

https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-2017

0 голосов
/ 07 сентября 2018

'11:00:00' - это 11:00 нулевой даты ( 1 января 1753 ). Очевидно, что все ваши даты больше, чем это.

Если вы хотите сравнивать только время, приведите время сначала:

case when cast(DeptRcptDate as time(0)) >= '11:00:00' then dateadd(d, 1, DeptRcptDate)
0 голосов
/ 07 сентября 2018

Вы можете использовать оператор CASE с DATEPART

declare @date datetime = '20160801 11:01:00'

select
    case 
        when datepart(hour,@date) >= 11 
        then dateadd(day,1,@date)
        else @date
    end
...