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.
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:
expr1 | Một biểu thức DateTime. |
expr2 | Mộ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
Chủ Đề