首页 > 解决方案 > 这个声明的结果是什么?

问题描述

我正在编写一个准备好的语句,并遇到了一些有趣的日期操作代码。因为我正在重写,所以我正确理解它是至关重要的。

我直接用谷歌搜索了代码并在 SO 上找到了类似的东西,但它与代码不完全匹配(我知道,它从来不是 :-) 我只需要验证我将它解释为只返回第二天的分钟秒数?

DECLARE @dEnd DATE = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dIncr)+1,0))

我把它放在一个条件语句中,将它与以下内容进行比较:

DECLARE @dIncr DATE = CAST(@Month as varchar(2)) + '/01/' + CAST(@Year as varchar(4))

编辑然后在此条件语句中使用游标运行变量:

WHILE ( @dIncr <= @dEnd )
BEGIN
--Random code
END

编辑 2 SQL Server v:

Microsoft SQL Azure (RTM) - 12.0.2000.8 
Nov 20 2018 21:01:54 
Copyright (C) 2018 Microsoft Corporation

提前感谢您提供的任何帮助!

标签: sql-servertsql

解决方案


 DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dIncr)+1,0))

这将获取当前月份的最后一天的日期@dIncr

打破这个:

DATEDIFF(m,0,@dIncr)+1

@dIncr说:返回自 1900 年 1 月 1 日 sql 日期纪元以来变量中日期的月数 + 1 (这是0函数中的)

DATEADD(mm, DATEDIFF(m,0,@dIncr)+1,0)

说:返回通过将先前计算的月数添加到 sql 日期纪元 1900 年 1 月 1 日来表示的日期

DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dIncr)+1,0))

说:从那个日期减去一秒。


推荐阅读