我正在尝试创建一个列,当持续时间为自初始日期起的一天(24小时或更长时间(时,该列将引发一个标志。
select
case when (enddte - begindte) > '23:59:59.000'
then '1'
else '0'
end as flag
from shipment
where ship_id = '14723'
需要注意的事项:结束日期和开始日期的格式如下:2017-09-06 20:22:36.000
我是否需要进一步分解以上计算日和小时的情况说明?
datediff()
不是执行此任务的好工具。每次越过边界时,它都会增加1,这在某种程度上会产生反直觉的结果。通常,今天13:59和今天14:01之间的时差为1。
您可以使用简单的日期算法,如下所示:
select s.*,
case when enddte > dateadd(day, 1, begindte) then 1 else 0 end as flag
from shipment s
where ship_id = 14723
当然,这假设这两列是合法的类似日期的数据类型,例如datetime
或datetime2
。
我相信,我已经想通了。
select
case
when (datediff(hour,enddte, begindte)/24.0) > 1
then '1'
else '0'
end as flag
from shipment
where ship_id = '1326747-2'