SQL计算多账单日期与单一生成日期的天数差及报错解决
解决SQL计算多账单日期与生成日期天数差的问题
错误原因
你遇到的Msg 512错误,是因为在DATEDIFF里用子查询(SELECT BillDate FROM @BillDateTable)返回了多行数据,但DATEDIFF的每个参数只能接受单个值,子查询返回多条结果就会触发这个报错。
修正后的查询写法
方式一:使用临时表计算
保留你创建的临时表,直接遍历每行数据计算天数差:
Declare @DateGen as date SET @DateGen = '2022-09-13' DECLARE @BillDateTable TABLE (BillDate date) insert into @BillDateTable (BillDate) SELECT ReaDate FROM Ledger SELECT BillDate, DATEDIFF(DAY, BillDate, @DateGen) AS DaysDifference FROM @BillDateTable
方式二:直接查询原表(更高效)
不需要临时表,直接从Ledger表读取数据计算:
Declare @DateGen as date SET @DateGen = '2022-09-13' SELECT ReaDate AS BillDate, DATEDIFF(DAY, ReaDate, @DateGen) AS DaysDifference FROM Ledger
可选:筛选特定日期范围
如果只需要计算生成日期之前(或之后)的账单日期差,可以添加WHERE条件:
Declare @DateGen as date SET @DateGen = '2022-09-13' SELECT ReaDate AS BillDate, DATEDIFF(DAY, ReaDate, @DateGen) AS DaysDifference FROM Ledger WHERE ReaDate <= @DateGen -- 仅计算生成日期及之前的账单日期
内容的提问来源于stack exchange,提问作者bordeaux
相关产品推荐
相关产品推荐

