SQL Server代码,如果在一定时间后添加时间到日期时间

时间:2018-09-07 16:48:09

标签: sql sql-server sql-server-2017

我是SQL Server编码的新手,请保持友善。

我正在尝试查看一列,如果时间在上午11点之后,那么我需要在日期上添加1天并显示新日期。如果在上午11点之前,则无需添加日期,只需显示日期本身即可。

正如您在图片中看到的,“ FDP日期”无论显示的是什么时间都在增加一天(IE:3和4行)。好像时间在上午11点之前,它不会显示任何时间。

请告诉我是否可以提供帮助。

预先感谢您, 布莱恩

代码:

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"

Picture of (same) code.

3 个答案:

答案 0 :(得分:3)

您可以将CASE语句与DATEPART一起使用

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

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

答案 1 :(得分:0)

'11:00:00'是零日期(January 1, 1753)的上午11点。显然,您所有的日期都大于该日期。

如果您只想比较时间,请先强制转换为time

case when cast(DeptRcptDate as time(0)) >= '11:00:00' then dateadd(d, 1, DeptRcptDate)

答案 2 :(得分:-2)

您正在对照包含时间的字符串检查日期时间。我给它带来意想不到的结果并不奇怪。

使用datepart()获取日期时间的时间部分,然后进行比较。

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