Cách tính tháng và ngày giữa hai ngày

lập trình


Chào các bạn,
Tôi cần tính tổng số không. Của tháng và ngày giữa hai ngày. Tôi có vấn đề trong truy vấn này. Làm ơn giúp tôi.
Trong truy vấn này 22/07/2021 và 23/06/2021
Trả lời hiển thị 1 ngày. Nhưng câu trả lời thực tế là 29 ngày.

Những gì tôi đã thử:

select@days=datepart(d,@currentdatetime)-datepart(d,@dateofbirth)

Giải pháp 5

Giải pháp 4 sẽ không hiệu quả nếu khoảng thời gian bao gồm năm nhuận (vì họ đã giả định 365 ngày trong một năm hoặc độ dài trung bình của tháng là 30 ngày.

Ví dụ: hãy thử mã đó với @ToDate là ‘2024-08-19’ và nó sẽ trả về 3 năm 1 tháng và 28 Ngày
Thay vào đó hãy thử phương pháp này
– Tính số tháng giữa 2 ngày rồi chia cho 12 để được số chênh lệch là năm đầy đủ
– Thêm số năm đó vào ngày bắt đầu để đưa ra ngày tạm thời giúp cuộc sống dễ dàng hơn
– Tính số DAYS giữa ngày tạm thời mới và Đến Ngày. Chia số ngày đó cho 30,5 để có được số tháng đầy đủ giữa các ngày.
– Cộng số tháng đó vào ngày tạm thời
– Tính số ngày giữa ngày tạm thời (mới) và Đến Ngày

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));

Đối với dữ liệu thử nghiệm này

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2023-08-19';

bạn sẽ nhận được 2 Năm 1 Tháng 27 Ngày và đối với dữ liệu thử nghiệm này

SQL
DECLARE @FromDate DATE  = '2021-06-23';
DECLARE @ToDate DATE = '2024-08-19';

bạn sẽ nhận được 3 Năm 1 Tháng 27 Ngày

Giải pháp 1

-- this gives you 23
select@days=datepart(d,@currentdatetime)

-- this gives you 22
datepart(d,@dateofbirth) 

23 – 22 = 1

Giải pháp 2

Giải pháp 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..!!!

Giải pháp 6

cái này hiệu quả với tôi…

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
;

コメント

タイトルとURLをコピーしました