我正在处理一条准备好的语句,并遇到了一些有趣的日期操作代码。进行重写是正确理解这一点的关键。
我直接搜索了一下代码,并在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
提前感谢您的帮助!
答案 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。