使用SQL Server 2008通过指定默认的月份日期来计算日期

使用SQL Server 2008通过指定默认的月份日期来计算日期,sql,sql-server,Sql,Sql Server,我需要用另一个日期减去一个日期来计算未来的日期。catch是我要减去的日期字段,它有一个月中的许多天,即。2020年10月27日或2020年11月30日。我需要做的是,不管一个月的哪一天,我都需要减去这个月,就像它是一个月的第一天一样,不管它是什么 例如,我有一个日期2020年12月31日,我需要从该日期中减去另一个日期2020年10月23日,但我需要将2020年10月23日默认为2020年10月1日,对于任何其他日期,我都需要从原始日期中减去。有什么想法吗?不太清楚你到底在问什么。但我假设你想

我需要用另一个日期减去一个日期来计算未来的日期。catch是我要减去的日期字段,它有一个月中的许多天,即。2020年10月27日或2020年11月30日。我需要做的是,不管一个月的哪一天,我都需要减去这个月,就像它是一个月的第一天一样,不管它是什么


例如,我有一个日期2020年12月31日,我需要从该日期中减去另一个日期2020年10月23日,但我需要将2020年10月23日默认为2020年10月1日,对于任何其他日期,我都需要从原始日期中减去。有什么想法吗?

不太清楚你到底在问什么。但我假设你想得到两次约会之间的时间差。但是,在此之前,您希望为第一个日期设置默认日期

您可以将第一个日期设置为第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参数更改为月份或年份

更新1:
正如Alex在下面的评论中提到的,您可以使用DATEFROMPARTS重建日期,这样更安全。因为从字符串强制转换可能会造成日期格式的混乱。

不确定您真正想要的是什么。但我假设你想得到两次约会之间的时间差。但是,在此之前,您希望为第一个日期设置默认日期

您可以将第一个日期设置为第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参数更改为月份或年份

更新1:
正如Alex在下面的评论中提到的,您可以使用DATEFROMPARTS重建日期,这样更安全。因为从字符串强制转换可能会造成日期格式的混乱。

您可以获取月份的第一天,然后使用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)
声明@tablefromdate日期,todate日期 插入@table 价值观“2020-10-27”、“2020-12-31” 选择datediffday、DATEADDmonth、DATEDIFFmonth、0、fromdate、0、todate作为不同的日期 来自@table
您可以获取月份的第一天,然后使用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)
声明@tablefromdate日期,todate日期 插入@table 价值观“2020-10-27”、“2020-12-31” 选择datediffday、DATEADDmonth、DATEDIFFmonth、0、fromdate、0、todate作为不同的日期 来自@table
请花点时间,通过向我们展示输入数据样本和预期输出来填补问题中的漏洞。每月第一天:。减法是什么意思?即,您想找出两个日期之间的天数吗?请花点时间,通过向我们展示示例输入数据和预期输出来填补问题中的漏洞。月的第一天:。减法是什么意思,也就是说,你想找出两个日期之间的天数吗?通过内置函数构造日期比字符串串联更安全。见函数。@Alex谢谢!以前从不知道零件的日期。。我总是使用CAST,这有时会造成日期格式的混乱。通过内置函数构造日期比字符串串联更安全。见函数。@Alex谢谢!以前从不知道零件的日期。。我总是使用CAST,这有时会造成日期格式的混乱。。