如果日期超过 1 天/24 小时,则升旗
Raise flag if date exceeds 1 day / 24 hours
我正在尝试创建一个列,当持续时间为初始日期的一天(24 小时或更长时间)时会引发一个标志。
select
case when (enddte - begindte) > '23:59:59.000'
then '1'
else '0'
end as flag
from shipment
where ship_id = '14723'
注意事项:
enddte 和 begindte 的日期格式如下 i.g.: 2017-09-06 20:22:36.000
我是否需要进一步分解上面计算日 - 天和小时 - 小时的案例陈述?
我相信,我想通了。
select
case
when (datediff(hour,enddte, begindte)/24.0) > 1
then '1'
else '0'
end as flag
from shipment
where ship_id = '1326747-2'
datediff()
不是完成此任务的好工具。每次越过边界时它都会递增 1,这会以某种方式产生 counter-intuitive 结果。通常,今天 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
当然,这假设这两个列是合法的 date-like 数据类型,例如 datetime
或 datetime2
.
我正在尝试创建一个列,当持续时间为初始日期的一天(24 小时或更长时间)时会引发一个标志。
select
case when (enddte - begindte) > '23:59:59.000'
then '1'
else '0'
end as flag
from shipment
where ship_id = '14723'
注意事项: enddte 和 begindte 的日期格式如下 i.g.: 2017-09-06 20:22:36.000
我是否需要进一步分解上面计算日 - 天和小时 - 小时的案例陈述?
我相信,我想通了。
select
case
when (datediff(hour,enddte, begindte)/24.0) > 1
then '1'
else '0'
end as flag
from shipment
where ship_id = '1326747-2'
datediff()
不是完成此任务的好工具。每次越过边界时它都会递增 1,这会以某种方式产生 counter-intuitive 结果。通常,今天 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
当然,这假设这两个列是合法的 date-like 数据类型,例如 datetime
或 datetime2
.