Hỏi đáp
Chia sẻ kiến thức, cùng nhau phát triển
cho mình hỏi về sql tính khoảng thời gian dạng ngày tháng năm với cám ơn mọi người nhiều
DECLARE @DOB DATETIME, @TEMPDATE DATETIME, @YEAR INT, @MONTHS INT, @DAY INT
SET @DOB = '12/24/1992'
SELECT @TEMPDATE = @DOB
SELECT @YEAR = DATEDIFF( YEAR,@TEMPDATE, GETDATE()) -
CASE
WHEN (MONTH(@DOB)) > MONTH(GETDATE()) OR
(MONTH(@DOB) > MONTH(GETDATE()) AND DAY (@DOB) > DAY (GETDATE()))
THEN 1 ELSE 0
END
SELECT @TEMPDATE = DATEADD( YEAR, @YEAR,@TEMPDATE)
SELECT @MONTHS = DATEDIFF(MONTH,@TEMPDATE,GETDATE()) -CASE
WHEN DAY(@DOB) > DAY(GETDATE())
THEN 1 ELSE 0
END
SELECT @TEMPDATE = DATEADD( MONTH, @MONTHS,@TEMPDATE)
SELECT @DAY = DATEDIFF(DAY, @TEMPDATE,GETDATE())
SELECT @YEAR AS years, @MONTHS AS months,@DAY AS [days]
cho mình hỏi câu lệnh trên vs từ ý tưởng với. có vài thứ mình ko hiểu đó là - case then 1 else 0 cụ thể hơn đoạn này SELECT @YEAR = DATEDIFF( YEAR,@TEMPDATE, GETDATE()) -
CASE
WHEN (MONTH(@DOB)) > MONTH(GETDATE()) OR
(MONTH(@DOB) > MONTH(GETDATE()) AND DAY (@DOB) > DAY (GETDATE()))
THEN 1 ELSE 0
END
cám ơn tất cả mọi người
Một ví dụ so sánh cho bạn dễ hiểu:
Câu lệnh if - else
Câu lệnh case - when
Lấy năm hiện tại trừ năm của TEMDATE, trả về số năm (int)
Nếu (tháng của DOB > tháng hiện tại) hoặc (tháng của DOB > tháng hiện tại và ngày của DOB > ngày hiện tại) thì trả về 1 ngược lại trả về 0.
Toàn câu lệnh : tổng số năm - 1 hoặc 0 theo đều kiện