[ad_1]
よう皆、
合計数を計算する必要があります。 2 つの日付の間の月と日。 このクエリには問題があります。 私を助けてください。
このクエリでは、2021/07/22 および 2021/06/23
回答は 1 日を示します。 しかし、実際の答えは 29 日です。
私が試したこと:
select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)
解決策 5
解決策 4 は、期間に閏年が含まれる場合には機能しません (1 年が 365 日であるか、平均月の長さが 30 日であると想定されているため)。
たとえば、@ToDate が ‘2024-08-19’ のコードを試してみると、3 年 1 か月が返されます。 28 日々
代わりにこのアプローチを試してください
– 2 つの日付の間の月数を計算し、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
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]
コメント