Hướng dẫn mysql datediff in years, months days - mysql dateiff theo năm, tháng, ngày

Các vấn đề trong câu trả lời được chấp nhận

Phương pháp trong câu trả lời được chấp nhận là tốt, nhưng những năm bước nhảy vọt vào ngày sinh nhật. Đây là một số trường hợp thử nghiệm:

create table sample [dob datetime,now datetime];
insert into sample [dob,now]values
['2012-02-29', '2013-02-28'],
['2012-02-29', '2016-02-28'],
['2012-02-29', '2016-03-31'],
['2012-01-30', '2016-02-29'],
['2012-01-30', '2016-03-01'],
['2011-12-30', '2016-02-29'];

SELECT
      date_format[dob,'%Y-%m-%d']
    , date_format[now,'%Y-%m-%d']
    , TIMESTAMPDIFF[ YEAR, dob, now ] as _year
    , TIMESTAMPDIFF[ MONTH, dob, now ] % 12 as _month
    , FLOOR[ TIMESTAMPDIFF[ DAY, dob, now ] % 30.4375 ] as _day
 FROM sample

       DOB         NOW YEAR     MONTH  DAY
2012-02-29  2013-02-28    0     11      30  -- 28 days would be better
2012-02-29  2016-02-28    3     11      29  -- 28 days would be better
2012-02-29  2016-03-31    4      1       0  -- 2 days would be better
2012-01-30  2016-02-29    4      0      30  
2012-01-30  2016-03-01    4      1       0  -- 2 days should be right
2011-12-30  2016-02-29    4      1       0  -- The right answer should be 4 years 1 months 30 days

Đây là cách tiếp cận của tôi, chỉ sử dụng số học

select
       DATE_FORMAT[dob,'%Y-%m-%d'],
       DATE_FORMAT[now,'%Y-%m-%d'],
       FLOOR[[ DATE_FORMAT[now,'%Y%m%d'] - DATE_FORMAT[dob,'%Y%m%d']]/10000],
       FLOOR[[1200 + DATE_FORMAT[now,'%m%d'] - DATE_FORMAT[dob,'%m%d']]/100] %12,
      [sign[day[now] - day[dob]]+1]/2 * [day[now] - day[dob]] + 
      [sign[day[dob] - day[now]]+1]/2 * [DAY[STR_TO_DATE[DATE_FORMAT[dob + INTERVAL 1 MONTH,'%Y-%m-01'],'%Y-%m-%d'] - INTERVAL 1 DAY]
                                         - day[dob] + day[now]]
       -- Explain: if the days of now is bigger than the days of birth, then diff the two days
       --          else add the days of now and the distance from the date of birth to the end of the birth month 
from sample

Các trường hợp và kết quả kiểm tra:

       DOB         NOW  YEARS   MONTHS  DAYS
2012-02-29  2013-02-28     0    11      28
2012-02-29  2016-02-28     3    11      28
2012-02-29  2016-03-31     4     1       2
2012-01-30  2016-02-29     4     0      30
2012-01-30  2016-03-01     4     1       2
2011-12-30  2016-02-29     4     1      30

Tôi có câu hỏi sau đây rằng tôi đang cố gắng để có được thời gian phục vụ của một người tại công ty của họ. Ý tưởng là tìm thấy bao nhiêu năm, tháng và ngày họ đã phục vụ ở đó.

Ví dụ:

Ngày ngày: Ngày 13 tháng 6 năm 2017. Jun 13, 2017.

Triển lãm A: John Doe đã phục vụ từ ngày 10 tháng 2 năm 2016. Vì vậy, thời gian phục vụ nên là 1 năm, 4 tháng, 3 ngày không bao gồm ngày kết thúc. John Doe has served since Feb 10, 2016. So length of service should be 1 year, 4 months, 3 days excluding the end date.

Triển lãm B: Jane Doe đã phục vụ từ ngày 13 tháng 6 năm 2007. Vì vậy, thời gian phục vụ nên hoặc 10 năm không bao gồm ngày kết thúc. Jane Doe has served since 13th Jun, 2007. So length of service should be Or 10 years excluding the end date.

Truy vấn của tôi spoiler: Nó không đúng

    SELECT  `firstname` ,
            DATE_FORMAT[ CURDATE[ ] ,  '%Y' ] - DATE_FORMAT[ startdate,  '%Y' ] - [ DATE_FORMAT[ CURDATE[ ] ,  '00-%m-%d' ] < DATE_FORMAT[ startdate,  '00-%m-%d' ] ] AS years, 
            PERIOD_DIFF[ DATE_FORMAT[ CURDATE[ ] ,  '%Y%m' ] , DATE_FORMAT[ startdate, '%Y%m' ] ] AS months, 
            DATEDIFF[ CURDATE[ ] , startdate ] AS days
    FROM users

Nó cho tôi kết quả trong nhiều năm, cũng như tháng, cũng như ngày. Vì vậy, đối với một người đã phục vụ một năm, nó sẽ xuất hiện: 1 năm, 12 tháng, 365 ngày, v.v.

Cập nhật lần cuối vào ngày 19 tháng 8 năm 2022 21:51:22 [UTC/GMT +8 giờ]

Hàm ngày []

Mysql datediff [] trả về số ngày giữa hai ngày hoặc dữ liệu. Hàm này chỉ tính toán phần ngày từ mỗi biểu thức.

Syntax:

DATEDIFF[expr1,expr2];

Tranh luận:

TênSự mô tả
expr1Một biểu thức DateTime.
expr2Một biểu thức DateTime.

expr2

Sơ đồ cú pháp:

Phiên bản MySQL: 5.6>

Trình bày video:>

Trình duyệt của bạn không hỗ trợ video HTML5.

Trình bày bằng hình ảnh:

Ví dụ: hàm mysql datediff []

Code:

SELECT DATEDIFF['2008-05-17 11:31:31','2008-04-28'];

Tuyên bố sau đây sẽ trả về các ngày giữa hai biểu thức DateTime 2008-05-17 11:31:31 và 2008-04-28.

mysql> SELECT DATEDIFF['2008-05-17 11:31:31','2008-04-28'];
+----------------------------------------------+
| DATEDIFF['2008-05-17 11:31:31','2008-04-28'] |
+----------------------------------------------+
|                                           19 | 
+----------------------------------------------+
1 row in set [0.00 sec]

Đầu ra mẫu:






example-DATEDIFF-function - php mysql examples | w3resource




Calculating difference of dates between 2008-05-17 11:31:31 and 2008-04-28 using MySQL:

Date difference

Bài Viết Liên Quan

Chủ Đề