Hướng dẫn select date mysql - chọn ngày mysql

Vừa qua mình vừa có 1 task liên quan đến việc tính toán và xử lí ngày tháng bằng câu lệnh SQL. Trong quá trình tìm hiểu và thực hiền mình có rút ra 1 chút kinh nghiệm hay hay nên hôm nay muốn chia sẽ cùng mọi người, mong có thế giúp các bạn khi cần thiết

Hướng dẫn select date mysql - chọn ngày mysql

1. Kiểu dữ liệu ngày SQL.

MySQL có các loại dữ liệu sau cho một ngày hoặc giá trị ngày / thời gian trong cơ sở dữ liệu: có các loại dữ liệu sau cho một ngày hoặc giá trị ngày / thời gian trong cơ sở dữ liệu:

  • Date - format YYYY-MM-DD - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MI:SS - format: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP - format: YYYY-MM-DD HH:MI:SS - format: YYYY-MM-DD HH:MI:SS
  • YEAR - format YYYY hoặc YY - format YYYY hoặc YY

Sql server có các loại dữ liệu sau cho một ngày hoặc giá trị ngày / thời gian trong cơ sở dữ liệu: có các loại dữ liệu sau cho một ngày hoặc giá trị ngày / thời gian trong cơ sở dữ liệu:

  • DATE - format YYYY-MM-DD - format YYYY-MM-DD
  • DATETIME - format: YYYY-MM-DD HH:MI:SS - format: YYYY-MM-DD HH:MI:SS
  • TIMESTAMP - format: YYYY-MM-DD HH:MI:SS - format: YYYY-MM-DD HH:MI:SS
  • YEAR - format YYYY hoặc YY - format: 1 số duy nhất

Sql server có các loại dữ liệu sau cho một ngày hoặc giá trị ngày / thời gian trong cơ sở dữ liệu:

DATE - format YYYY-MM-DDSMALLDATETIME - format: YYYY-MM-DD HH:MI:SS
TIMESTAMP - format: 1 số duy nhất() 2. Các funtion thường sử dụng.
Tên() Chức năng
DATE() () Trả về ngày từ biểu thức datetime
CURDATE() () Trả về ngày hiện tại của máy tính
YEAR() () Trả về năm của ngày đã chỉ định
MONTH() () Trả về tháng của ngày đã chỉ định
TIMESTAMP - format: 1 số duy nhất() 2. Các funtion thường sử dụng.
Tên() 2. Các funtion thường sử dụng.
Tên() 2. Các funtion thường sử dụng.
Tên() 2. Các funtion thường sử dụng.
Tên() Chức năng
DATE() () Trả về ngày từ biểu thức datetime
CURDATE() () Trả về ngày hiện tại của máy tính
YEAR() () Trả về năm của ngày đã chỉ định
MONTH() () Trả về tháng của ngày đã chỉ định

DAY()

Trả về ngày của ngày được chỉ định

TIME()

Trả về giờ của ngày được chỉ định

Hướng dẫn select date mysql - chọn ngày mysql

DATE_ADD() DATEDIFF()

DATEDIFF() () trừ hai giá trị ngày và trả về số ngày giữa chúng.

SELECT DATEDIFF(CURDATE(), birthday) AS days_difference
     FROM friends
    LIMIT 5;

DATE_SUB()

Hướng dẫn select date mysql - chọn ngày mysql

NOW()

Hướng dẫn select date mysql - chọn ngày mysql
bạn chỉ cần chia cho 365 ngày là ra kết quả số tuổi.

SELECT ROUND(DATEDIFF(CURDATE(), birthday) / 365, 0) AS years
    FROM friends
   LIMIT 5;

Hướng dẫn select date mysql - chọn ngày mysql

Trả về thời gian hiện tại

DAYOFWEEK()

SELECT 
    first_name,
    last_name,
    (YEAR(CURDATE()) - YEAR(birthday)) - (RIGHT(CURDATE(), 5) < RIGHT(birthday, 5)) AS years
FROM
    friends

Trả về ngày của tuần

DAYNAME()

Hướng dẫn select date mysql - chọn ngày mysql

Trả về tên ngày

ORDER BY age ASC; //sắp xếp tăng dần
ORDER BY age DESC; // sắp xếp giảm dần 

MONTHNAME()

Trả về tên tháng

STR_TO_DATE()

Format chuỗi về ngày

....... Ngoài ra còn rất nhiều hàm khác nhưng mình xin phép trình bày một số hàm mà chúng ta hay sử dụng như trên.

3. Tính toán

SELECT 
    first_name,
    last_name,
    birthday,
    CASE
        WHEN DAYOFWEEK(birthday) = '1' THEN 'Sunday'
        WHEN DAYOFWEEK(birthday) = '2' THEN 'Monday'
        WHEN DAYOFWEEK(birthday) = '3' THEN 'Tuesday'
        WHEN DAYOFWEEK(birthday) = '4' THEN 'Wednesday'
        WHEN DAYOFWEEK(birthday) = '5' THEN 'Thursday'
        WHEN DAYOFWEEK(birthday) = '6' THEN 'Friday'
        WHEN DAYOFWEEK(birthday) = '7' THEN 'Saturday'
        ELSE 'not a day of week'
    END AS day_of_week
FROM
    friends
LIMIT 10

Hướng dẫn select date mysql - chọn ngày mysql
3.1 Còn bao nhiêu ngày nữa ?

Câu hỏi này chắc chắn chạy qua đầu của chúng ta ít nhất là hàng tuần nếu không nói là hàng ngày DAYNAME() phù hợp cho việc này. Đơn giản chỉ cần cung cấp cho nó một giá trị ngày và bạn là vàng.

SELECT 
    first_name, last_name, DAYNAME(birthday)
FROM
    friends
LIMIT 10

Hướng dẫn select date mysql - chọn ngày mysql

MySQL giải quyết loại câu hỏi này với hàm DATEDIFF()

DATEDIFF() trừ hai giá trị ngày và trả về số ngày giữa chúng.

SELECT 
    (MONTH(birthday)) AS month, COUNT(*) AS number_of_birthdays
FROM
    friends
GROUP BY month
ORDER BY month ASC

và kết quả là đây :

Hướng dẫn select date mysql - chọn ngày mysql
Vậy liệu chúng ta có thể lấy tên của tháng không ? câu trả lởi chắc chắn là có rồi

sau khi lấy được số ngày, bạn muốn xem người đó năm nay bao nhiêu tuổi bạn chỉ cần chia cho 365 ngày là ra kết quả số tuổi.

SELECT DISTINCT
    (MONTHNAME(birthday)) AS month,
    COUNT(*) AS number_of_birthdays
FROM
    friends
GROUP BY month

Hàm ROUND()toán học được sử dụng để làm tròn kết quả thành một số nguyên.

Hướng dẫn select date mysql - chọn ngày mysql

Bạn cũng có thể tính toán tuổi của friends bằng cách sau

Giải thích 1 chút :

SELECT STR_TO_DATE("August 10 2017", "%M %d %Y")

Hướng dẫn select date mysql - chọn ngày mysql

Hàm CURDATE () trả về ngày hiện tại của máy tính, hàm YEAR () trả về năm của ngày đã chỉ định, hàm MONTH () trả về tháng của ngày đã chỉ định, hàm DAY () trả về ngày của ngày được chỉ định Hàm RIGHT () trả về số lượng ký tự như được chỉ định trong hàm từ chuỗi hoặc ngày đã cho. Phần của biểu thức so sánh các trả về từ hàm RIGHT () ước tính 1 hoặc 0. kết quả là :

Hướng dẫn select date mysql - chọn ngày mysql

Sau khi select được số tuổi của các friend trong khoa trong list friend của mình bạn muốn sắp xếp số tuổi theo thứ tự giảm dần hoặc tăng dần thì chúng ta chỉ cần

3.2 Chúng ta không bao giờ quên sinh nhật phải không?

Giả sử chúng ta muốn biết ngày trong tuần là sinh nhật của một người bạn. Có lẽ chúng tôi nhìn vào friends bàn mỗi tuần và biết được ai sẽ sinh nhật, nếu có, và ghi chú ngày hôm nay là ngày gì.

SELECT 
    first_name, last_name, birthday
FROM
    friends
WHERE
    birthday IS NOT NULL;

Các DAYOFWEEK()hàm trả về một giá trị số cho tham số giá trị ngày tháng. Những con số đó đại diện cho:

1 = Chủ nhật,

SELECT ROUND(DATEDIFF(CURDATE(), birthday) / 365, 0) AS years
    FROM friends
   LIMIT 5;
0

Hướng dẫn select date mysql - chọn ngày mysql

2 = Thứ hai, v.v.

Chúng ta có thể đặt một CASE biểu thức để sử dụng ở đây.

Hướng dẫn select date mysql - chọn ngày mysql

Awesome! Điều đó hoạt động hoàn hảo. Nhưng nó khá dài để lấy tên 1 ngày trong tuần.

https://www.w3resource.com/mysql/advance-query-in-mysql/date-calculation.php

https://www.w3school.com https://codeburst.io/handy-mysql-date-comptions-with- examples-93dbd79849c5