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

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

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.

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

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:

query('SELECT DATEDIFF("2008-05-17 11:31:31","2008-04-28") as date_difference') as $row) { echo ""; echo ""; echo ""; } ?>
Date difference
" . $row['date_difference'] . "

Kịch bản PHP:

Xem ví dụ trong trình duyệt

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>




example-datediff-function


<%
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
String Host = "jdbc:mysql://localhost:3306/w3resour_bookinfo";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
connection = DriverManager.getConnection(Host, "root", "datasoft123");
statement = connection.createStatement();
String Data = "SELECT DATEDIFF('2008-05-17 11:31:31','2008-04-28') as date_difference";
rs = statement.executeQuery(Data);
%>

<%
while (rs.next()) {
%>

<%   }    %>
Date difference
<%=rs.getString("date_difference")%>
<% rs.close(); statement.close(); connection.close(); } catch (Exception ex) { out.println("Can’t connect to database."); } %>

Script jsp:

Ví dụ: hàm datediff () sử dụng bảng

Tuyên bố sau đây sẽ trả về các hàng đó từ việc mua bảng trong đó sự khác biệt của ngày giữa ‘Invoice_dt, và‘ ord_date, ít hơn 10.

Code:

SELECT invoice_dt,ord_date,DATEDIFF(invoice_dt,ord_date)
FROM purchase           
WHERE DATEDIFF(invoice_dt,ord_date)<10;  

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.

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
0

Đầu ra mẫu:

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
1

Kịch bản PHP:

Xem ví dụ trong trình duyệt

Script jsp:

Ví dụ: hàm datediff () sử dụng bảng

Tuyên bố sau đây sẽ trả về các hàng đó từ việc mua bảng trong đó sự khác biệt của ngày giữa ‘Invoice_dt, và‘ ord_date, ít hơn 10. DATE()
Next: DAY()

Làm thế nào để tôi tính tuổi trong nhiều tháng và ngày trong mysql?

Trong MySQL, bạn có thể sử dụng hàm dấu thời gian sẵn có () để tính chênh lệch giữa hai ngày và trả về giá trị trong ngày, tháng hoặc năm. Xem cú pháp cơ bản dưới đây. mysql> chọn dấu thời gian (tháng, first_date, second_date);use the inbuilt TIMESTAMPDIFF() function to compute the difference between two dates and return a value either in days, months or years. See the basic syntax below. mysql> SELECT TIMESTAMPDIFF(MONTH, FIRST_DATE, SECOND_DATE);

Làm thế nào để tôi tìm thấy sự khác biệt trong tháng giữa hai ngày trong MySQL?

Một trong những cách là mysql intion_diff () trả về sự khác biệt giữa hai giai đoạn.Các giai đoạn nên ở cùng định dạng, tức là yyyymm hoặc yymm.Cần lưu ý rằng các khoảng thời gian không phải là giá trị ngày ...
Thời kỳ có thể tính toán số tháng một cách chính xác.....
"Chính xác hơn" là chủ quan đáng kinh ngạc khi nói đến ngày ..

Datediff có làm việc trong MySQL không?

Hàm Datediff có thể được sử dụng trong các phiên bản sau của MySQL: MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1.1. MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1. 1.

Làm thế nào tôi có thể tính toán chênh lệch ngày giữa hai ngày trong MySQL?

Để đếm sự khác biệt giữa ngày trong MySQL, hãy sử dụng hàm Datediff (Enddate, StartDate).Sự khác biệt giữa startdate và enddate được thể hiện trong ngày.Trong trường hợp này, phần cuối đang đến và startDate là khởi hành.use the DATEDIFF(enddate, startdate) function. The difference between startdate and enddate is expressed in days. In this case, the enddate is arrival and the startdate is departure .