[ad_1]
嗨朋友们,
我需要计算总数。 两个日期之间的月份和天数。 我在这个查询中遇到问题。 请帮我。
在此查询中 22/07/2021 和 23/06/2021
Ans 显示 1 天。 但实际答案是29天。
我尝试过的:
select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)
解决方案5
如果该期间包含闰年,解决方案 4 将不起作用(因为他们假设一年有 365 天,或者平均月份长度为 30 天。
例如,尝试使用 @ToDate 为“2024-08-19”的代码,它将返回 3 年 1 个月, 28 天
尝试这种方法
– 计算两个日期之间的月数并除以 12 以获得完整年份的差值
– 在开始日期中添加该年数以给出临时日期,使生活更轻松
– 计算新的中间日期和截止日期之间的天数。 将该天数除以 30.5 获取日期之间的完整月数。
– 将月数添加到临时日期
– 计算(新的)临时日期和截止日期之间的天数
SQL
declare @years int = (SELECT CAST(DATEDIFF(MONTH, @fromdate, @todate) / 12 as int)); declare @interimDate date = (SELECT DATEADD(YEAR, @years, @fromdate)); declare @months int = (SELECT CAST(DATEDIFF(DAY, @interimDate, @todate) / 30.5 as int)); set @interimDate = (SELECT DATEADD(MONTH, @months, @interimDate)); declare @days int = (SELECT DATEDIFF(DAY, @interimDate, @todate));
对于本次测试数据
SQL
DECLARE @FromDate DATE = '2021-06-23'; DECLARE @ToDate DATE = '2023-08-19';
对于此测试数据,您将获得 2 年 1 个月 27 天
SQL
DECLARE @FromDate DATE = '2021-06-23'; DECLARE @ToDate DATE = '2024-08-19';
您将获得 3 年 1 个月 27 天
解决方案1
-- this gives you 23 select@days=datepart(d,@currentdatetime) -- this gives you 22 datepart(d,@dateofbirth)
23 – 22 = 1
解决方案2
两个日期之间的月份和天数 SQL – Google 搜索[^]。 花了5秒才找到。
解决方案4
SQL
--Please use the following script, might be the following script will give you your final solution, DECLARE @FromDate DATE =CONVERT(DATE,'23/06/2021',103) -- DD/MM/YYYY DECLARE @ToDate DATE = CONVERT(DATE,'19/08/2023',103) -- DD/MM/YYYY SELECT DATEDIFF(DAY,@FromDate,@ToDate) [TotalDays] --787 days --Query to find the number of Years, Months, Days... SELECT DATEDIFF(YEAR,@FromDate,@ToDate) as [Years], (DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30 as [Months], DATEDIFF(DAY,@FromDate,@ToDate) - ( (DATEDIFF(YEAR,@FromDate,@ToDate)*365) + (((DATEDIFF(DAY,@FromDate,@ToDate) -(DATEDIFF(YEAR,@FromDate,@ToDate))*365)/30)*30)) as [Days] --OutPut - Years Months Days -- 2 1 27 --Thanks..!!!
解决方案6
这对我有用……
SQL
DECLARE @sd DATE = '2024-01-15' ,@ed DATE = '2028-02-05' ,@y INT ,@m INT ,@d INT ,@d01 DATE ,@d02 DATE ; SELECT @y = DATEDIFF (YEAR , @sd , @ed ) ; SELECT @d01 = DATEADD (YEAR , @y , @sd ) ; SELECT @m = DATEDIFF (MONTH , @d01 , @ed ) ; SELECT @d02 = DATEADD (MONTH , @m , @d01 ) ; SELECT @d = DATEDIFF (DAY , @d02 , @ed ) ; if (@d < 0) BEGIN SELECT @m -= 1 ; SELECT @d02 = DATEADD(MONTH, @m, @d01) ; SELECT @d = DATEDIFF(DAY, @d02, @ed) ; END ; SELECT @sd, @ed, @y, @m, @d ;
[ad_2]
コメント