我是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"
答案 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