此声明的结果是什么?

时间:2019-01-22 17:04:14

标签: sql-server tsql

我正在处理一条准备好的语句,并遇到了一些有趣的日期操作代码。进行重写是正确理解这一点的关键。

我直接搜索了一下代码,并在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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

None

这将获得日期 DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@dIncr)+1,0))

的当前月份的最后一天

打破这一点:

@dIncr

说:自1900年1月1日的sql日期开始(这是函数中的DATEDIFF(m,0,@dIncr)+1 ),返回变量@dIncr中日期的月份数+ 1。

0

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

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

说:从该日期开始减去一秒钟。

答案 1 :(得分:1)

这是确定第一个日期所在月份的最后一天的“技巧”。如果这样运行,则更容易理解:

STDIN

哪位给出的答案为31-01-2017。