我想问 3 个关于以下代码的问题(请原谅冗长的代码清单,我将这些行包括在内是希望它提供足够的上下文)。
请注意,此处的代码取决于执行日期。出于这个原因,我的问题是指具有两个不同执行日期的假设情况:
- 2014 年 3 月 1 日
- 2014 年 1 月 1 日
我的问题是我对其中某些部分的理解是否正确,即:
一个。SELECT DATEADD
表达式(在第 1 行)将:
- 在 2014年3 月 1 日创建日期时间
2014-02-31 23:59:59
乙。第 6-9 行的代码将:
- 在 2014年3 月 1 日创建日期时间
2014-02-01 00:00:00
- 在 2014年1 月 1 日创建日期时间
2013-02-01 00:00:00
和
C. _ 第 11-14 行的代码将:
- 在 2014年3 月 1 日创建日期时间
2015-01-30 00:00:00
- 在 2014年1 月 1 日创建日期时间
2014-01-30 00:00:00
这种理解正确吗?
1. SET @ldpmth = (SELECT DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0)) )
2. SET @yr = (SELECT YEAR(@ldpmth))
3. SET @mth = 0
4. SET @dy = 0
5.
6. SET @fysdate = (SELECT CASE WHEN MONTH(@ldpmth) >= 2 THEN
7. DATEADD(MM, 1,CAST(CAST(@yr+@mth+@dy AS NVARCHAR(50)) AS DATETIME))
8. ELSE DATEADD(MM, 1, CAST(CAST((@yr-1)+@mth+@dy AS NVARCHAR(50))
9. AS DATETIME)) END )
10.
11. SET @fyedate = (SELECT CASE WHEN MONTH(@ldpmth) >= 2 THEN
12. DATEADD(YY, 1, CAST(CAST(@yr+@mth+@dy AS NVARCHAR(50)) AS DATETIME)) + 30
13. ELSE DATEADD(YY, 1, CAST(CAST((@yr-1)+@mth+@dy AS NVARCHAR(50))
14. AS DATETIME)) + 30 END )
(感谢到目前为止所有回答的人。这实际上是几年前在我的工作地点开发(但未记录)的代码,我的任务是将其转换为与 Crystal Reports 一起在客户端工作的表单。 )