首页 > 解决方案 > SQL中日期的滞后函数

问题描述

我正在使用 LAG SQL 函数来获取记录中 2 个连续日期的差异。问题是,它返回的结果是 DATE -TIME 格式,而我希望它以天或小时为单位。附件是输出结果和预期结果。

代码:

select 
   *, 
   (action_date - lag(action_date) over (partition by voucher_no order by action_date)) as diff 
from cte3

在此处输入图像描述

标签: sqlsql-server

解决方案


我建议使用time最后一列——尽管它也给了你几秒钟的时间:

SELECT DATEDIFF(day, LAG(Date) OVER (ORDER BY Date), Date ) AS diff_day,
       CONVERT(TIME, Date - LAG(Date) OVER (ORDER BY Date)) as time
FROM t;

如果您愿意,可以很简单地将其转换为 HH:MM 格式:

SELECT DATEDIFF(day, LAG(Date) OVER (ORDER BY Date), Date ) AS diff_day,
       CONVERT(VARCHAR(5), CONVERT(TIME, Date - LAG(Date) OVER (ORDER BY Date))) as time_hhmm
FROM t;

是一个 db<>fiddle。

我更喜欢这种方法,因为它更容易格式化时间。特别是,小提琴包括一个时间为 00:01 的示例,其格式为00:01而不是0:1.


推荐阅读