使用SQLServer2008通过提供默认的月份日期来计算日期

xxhby3vn  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(267)

我需要用另一个日期减去一个日期来计算未来的日期。捕获是我减去的日期字段有一个月的许多天…即。2020年10月27日或2020年11月30日。我要做的是,不管一个月的哪一天,我都要把这个月减去,就好像它是一个月的第一天一样,不管它是什么。
例如,我有一个日期12/31/2020,我需要从该日期中减去另一个日期10/23/2020,但我需要将10/23/2020默认为10/01/2020,对于任何其他日期,我将从原始日期中减去。有什么想法吗?

szqfcxe2

szqfcxe21#

您可以获取一个月的第一天,然后使用datediff来获取日期差。

DECLARE @table table(fromdate date,todate date)

insert into @table
VALUES ('2020-10-27','2020-12-31')

SELECT datediff(day, DATEADD(month, DATEDIFF(month, 0, fromdate), 0),todate) AS DifferenceDays
from @table
+----------------+
| DifferenceDays |
+----------------+
|             91 |
+----------------+
wooyq4lh

wooyq4lh2#

不太清楚你到底在问什么。但我假设你想得到两次约会之间的时间差。但是,在此之前,您需要为第一个日期设置默认日期。
您可以将第一个日期设置为第1天,然后使用datediff了解差距/差异。

-- source date
declare @date date = '10/27/2020'
declare @dateSubtract date = '10/23/2020'

-- break the date, take month and year only
declare @month int = DATEPART(MONTH, @date)
declare @year int = DATEPART(YEAR, @date)

-- reconstruct the date with default day=1
select @date = CAST((STR(@month) + '/01/' + STR(@year)) as date)

-- get the calculation
select DATEDIFF(DAY, @date, @dateSubtract)

结果将是(以天为单位),

22

您可以将datediff参数更改为month或year。

更新1:正如alex在下面的评论中提到的,你可以使用datefromparts重构日期,这样更安全。因为从字符串强制转换可能会导致日期格式混乱。

相关问题