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

22:01 30-10-2017 503 lượt xem 3 bình luận 09:09 01-11-2017

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

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
hnguyen đã bình luận 09:09 01-11-2017

Một ví dụ so sánh cho bạn dễ hiểu:

Câu lệnh if - else

if (expression){true_result_expression}
else {false_result_expression}

Câu lệnh case - when 

CASE WHEN expression THEN true_result_expression ELSE false_result_expression END

 

hnguyen đã bình luận 09:15 31-10-2017

 

DATEDIFF( YEAR,@TEMPDATE, GETDATE())

Lấy năm hiện tại trừ năm của TEMDATE, trả về số năm (int)

CASE  WHEN (MONTH(@DOB)) > MONTH(GETDATE()) OR 
(MONTH(@DOB) > MONTH(GETDATE()) AND DAY (@DOB) > DAY (GETDATE()))
THEN 1 ELSE 0 END

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

Câu hỏi mới nhất