Tính Toán Và Xử Lý Ngày Tháng Bằng Câu Lệnh SQL Như Thế Nào?
Có thể bạn quan tâm
- Techblog
- Kiến thức cơ bản
SQL được biết đến là 1 trong những ngôn ngữ lập trình truy vấn có cấu trúc rất phổ biến hiện nay trong thế giới công nghệ. Trong SQL thì kiểu dữ liệu ngày tháng là kiểu dữ liệu thường gây ra khó khăn cho các lập trình viên khi thao tác. Bài viết này của Bizfly Cloud sẽ tổng hợp và hướng dẫn các bạn cách tính toán và xử lý ngày tháng bằng câu lệnh SQL. Chúng ta cùng tìm hiểu nhé.
Kiểu dữ liệu SQL cho ngày
Giá trị ngày/thời gian trong cơ sở dữ liệu MySQL thường có những loại như sau:
Date - format YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MI:SS
TIMESTAMP - format: YYYY-MM-DD HH:MI:SS
YEAR – format: YYYY hoặc YY
Riêng đối với Sql server thì giá trị ngày/thời gian trong cơ sở dữ liệu có các loại như sau:
DATE – format: YYYY-MM-DD
DATETIME - format: YYYY-MM-DD HH:MI:SS
SMALLDATETIME - format: YYYY-MM-DD HH:MI:SS
TIMESTAMP - format: 1 số duy nhất
Các function thường dùng để tính toán và xử lý ngày tháng bằng câu lệnh SQL
Để tính toán và xử lý ngày tháng bằng câu lệnh SQL, các hàm dưới đây thường hay được sử dụng nhiều nhất.
Tên | Chức năng |
DATE() | Hàm trả về ngày từ biểu thức datetime |
CURDATE() | Hàm trả về ngày hiện tại của máy tính |
YEAR() | Hàm trả về năm của ngày đã chỉ định |
MONTH() | Hàm trả về tháng của ngày đã chỉ định |
DAY() | Hàm trả về ngày của ngày được chỉ định |
TIME() | Hàm trả về giờ của ngày được chỉ định |
DATE() | Hàm trả về ngày từ biểu thức datetime |
DATE_ADD() | Hàm cộng thời gian |
DATEDIFF() | Hàm trả về chênh lệch giữa 2 giá trị thời gian |
DATE_SUB() | Hàm trừ thời gian |
NOW() | Hàm trả về thời gian hiện tại |
DAYOFWEEK() | Hàm trả về ngày của tuần |
DAYNAME() | Hàm trả về tên ngày |
MONTHNAME() | Hàm trả về tên tháng |
STR_TO_DATE() | Format chuỗi về ngày |
Tính toán và xử lý ngày tháng bằng câu lệnh SQL như thế nào?
Giả sử chúng ta có bảng dữ liệu mẫu về một nhóm 6 người bạn trong SQL như sau (bảng dữ liệu này được sử dụng chung cho các tính toán bên dưới).
Friends
First_name | Last_name | Birthday |
Le Thi | Thu | 1996-12-12 |
Vu Thi | Nga | 1997-11-17 |
Nguyen Van | C | 2000-12-17 |
Pham Van | D | 1998-10-11 |
Tran Dinh | Trong | 1997-04-25 |
Bui Tien | Dung | 1997-02-28 |
Giả sử ngày hiện tại là 2021-06-03. Để tính toán còn bao nhiêu ngày nữa, MySQL sử dụng hàm DATEDIFF() để trừ hai giá trị ngày và trả về số ngày giữa chúng. Giả sử chúng ta muốn tính toán xem ngày hiện tại so với ngày sinh của nhóm 6 người bạn ở mẫu dữ liệu trên là bao nhiêu thì bạn code như sau:
SELECT DATEDIFF(CURDATE(), birthday) AS days_difference
FROM friends
LIMIT 6;
Và đây là kết quả được trả về:
Để biết được nhóm 6 người này có lần lượt số tuổi là bao nhiêu thì bạn chỉ cần chia cho 365 ngày là ra số tuổi của từng người. Code như sau:
SELECT ROUND(DATEDIFF(CURDATE(), birthday) / 365, 0) AS years
FROM friends
LIMIT 6;
Trong đó hàm toán học ROUND () được dùng để làm tròn kết quả thành 1 số nguyên
Và đây là kết quả
Ngoài ra bạn cũng có thể tính toán tuổi của bạn bè mình bằng cú pháp sau:
SELECT
first_name,
last_name,
(YEAR(CURDATE()) - YEAR(birthday)) - (RIGHT(CURDATE(), 5) < RIGHT(birthday, 5)) AS years
FROM
friends
Đến đây mình giải thích 1 chút nhé. Lấy ví dụ như Thu có ngày sinh là 1996-12-12. Hàm CURDATE () được áp dụng nhằm mục đích trả về ngày hiện tại của máy tính. Giả sử là ngày 2021-06-03. Hàm YEAR () dùng để trả về năm của ngày đã chỉ định. Ở đây, (YEAR(CURDATE()) - YEAR(birthday)) sẽ trả về kết quả số năm chênh lệch giữa năm hiện tại và năm sinh của người được tính tuổi. Nghĩa là lấy 2021-1996 = 25.
Hàm RIGHT () dùng để trả về số lượng ký tự như được chỉ định trong hàm từ chuỗi hoặc ngày đã cho. Hàm right có công thức RIGHT(chuoi, so_ky_tu). Số ký tự là 5, nghĩa là giá trị mà hàm Right lấy ra là ngày và tháng của ngày hiện tại và ngày sinh nhật. Ở đây hàm RIGHT(CURDATE(), 5) lấy ra giá trị là 06-03 và hàm RIGHT(birthday, 5) lấy ra giá trị là 12-12. Trong đó, 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. Nghĩa là 06-03 < 11-11 nên lấy giá trị 1. Từ đó SQL sẽ tính toán được tuổi của Thu là 25-1=24 tuổi.
Và đây là kết quả trả về
Sau khi tính toán ra số tuổi của bạn bè mình, bạn có thể sắp xếp lại trong list danh sách bạn bè theo thứ tự số tuổi tăng dần hoặc giảm dần bằng cách thêm các trường sau đây vào cuối mệnh đề ở trên.
ORDER BY age ASC; //sắp xếp tăng dần
ORDER BY age DESC; // sắp xếp giảm dần
Tính toán ngày sinh nhật
Khi tính toán và xử lý ngày tháng bằng câu lệnh SQL, bạn có thể tính toán xem trong tuần có ngày sinh nhật nào của bạn bè mình hay không bằng cách sử dụng hàm DAYOFWEEK() là hàm trả về một giá trị số cho tham số giá trị ngày tháng. Và những con số đó đại diện cho:
1 = Chủ nhật,
2 = Thứ hai, v.v.
Ở đây bạn có thể đặt 1 case biểu thức để tính toán như sau:
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
Vàkết quả có được như sau:
Bằng cách này thì kết quả tương đối ổn. Tuy nhiên để lấy tên 1 ngày trong tuần thì nó còn khá dài. Vì thế có sử dụng 1 function DAYNAME() phù hợp hơn cho việc này. Đơn giản chỉ cần cung cấp cho nó một giá trị ngày và kết quả sẽ nhanh hơn rất nhiều. Code như sau:
SELECT
first_name, last_name, DAYNAME(birthday)
FROM
friends
LIMIT 10
Và đây là kết quả
Tính toán và xử lý tháng
Khi tính toán và xử lý ngày tháng bằng câu lệnh SQL , từ 1 giá trị ngày tháng cung cấp thì các hàm MONTH() được sử dụng để lấy giá trị số theo tháng. Khi kết quả trả về là 1 (đại diện cho tháng 1) và 2 (đại diện cho tháng 2)…tương tự các tháng còn lại cũng tuân theo quy luật trên.
SELECT
(MONTH(birthday)) AS month, COUNT(*) AS number_of_birthdays
FROM
friends
GROUP BY month
ORDER BY month ASC
Trong truy vấn này, hàm COUNT() có nhiệm vụ đếm số người có cùng ngày sinh trong mỗi tháng.
Kết quả như sau:
Sau đó chúng ta dùng hàm MONTHNAME() để lấy tên của tháng. Code như sau:
SELECT DISTINCT
(MONTHNAME(birthday)) AS month,
COUNT(*) AS number_of_birthdays
FROM
friends
GROUP BY month
Và kết quả trả về như sau:
Tính toán và xử lý ngày
Giả sử như bạn muốn nhập thông tin về ngày sinh nhật của một người mới trong quá trình tính toán và xử lý ngày tháng bằng câu lệnh SQL bạn phải nhập ngày ở dạng chuỗi. Giả sử người đó sinh vào ngày 10 tháng 8 năm 2017 thì bạn nhập như sau:
SELECT STR_TO_DATE("August 10 2017", "%M %d %Y")
Trong chuỗi ký hiệu được định dạng %M %d,%Y thì %M là tên tháng. %d là ngày trong tháng. %Y là 4 chữ số năm.
Ngày có giá trị NOT NULL
Có thể dùng câu lệnh MySQL dưới đây để kiểm tra ngày không phải là Null
SELECT
first_name, last_name, birthday
FROM
friends
WHERE
birthday IS NOT NULL;
Nó sẽ lọc ra các hàng có ngày sinh nhật không phải là null cho bạn.
Lấy ra những ngày trong khoảng ngày từ ngày... đến ngày ...
Trong tính toán và xử lý ngày tháng bằng câu lệnh SQL thì để có thể lấy ra những ngày trong 1 khoảng thời gian định sẵn thì các bạn code như sau:
SELECT
*
FROM
friends
WHERE
birthday BETWEEN '1996-10-05 00:00:00' AND '1996-12-25 23:59:59'
Và đây là kết quả trả về dữ liệu của người có ngày sinh trong khoảng thời gian trên.
Đến đây có lẽ bạn đã hiểu được cách tính toán và xử lý ngày tháng bằng câu lệnh SQL thông qua những ví dụ cụ thể trong bài viết này. Nếu để ý kỹ bạn sẽ thấy nó không hề khó chút nào. Chỉ cần bạn kiên nhẫn thực hành luyện tập nhiều lần thì sẽ không còn bỡ ngỡ nếu phải tính toán và xử lý ngày tháng bằng câu lệnh SQL trong công việc của mình ở hiện tại và tương lai. Chúc bạn thành công.
Bizfly Cloud là nhà cung cấp dịch vụ điện toán đám mây với chi phí thấp, được vận hành bởi VCCorp.
Bizfly Cloud là một trong 4 doanh nghiệp nòng cốt trong "Chiến dịch thúc đẩy chuyển đổi số bằng công nghệ điện toán đám mây Việt Nam" của Bộ TT&TT; đáp ứng đầy đủ toàn bộ tiêu chí, chỉ tiêu kỹ thuật của nền tảng điện toán đám mây phục vụ Chính phủ điện tử/chính quyền điện tử.
Độc giả quan tâm đến các giải pháp của Bizfly Cloud có thể truy cập tại đây.
DÙNG THỬ MIỄN PHÍ và NHẬN ƯU ĐÃI 3 THÁNG tại: Manage.bizflycloud
SHAREFacebookTwitterBizfly Cloud
Bài viết liên quan
Hadoop là gì?Khung công tác mã nguồn mở cho Big Data Headless CMS là gì?Các loại giải pháp Headless CMS Lưới dữ liệu là gì? Những lợi ích mà lưới dữ liệu mang lại EUC (Điện toán dành cho người dùng cuối) là gì? Nhận dạng khuôn mặt là gì? Lợi ích của nhận dang khuân mặt mang... GRC là gì? Làm thế nào GRC hoạt động Những cách để kiểm tra tốc độ hosting SRE là gì? Vai trò và cách thức hoạt động của SRE trong hệ... RAM là gì? Cơ chế hoạt động và phân loại RAM hiện nay RPC là gì? Cách thức hoạt động của RPC ITIL là gì? Hướng dẫn toàn diện về thư viện hạ tầng công nghệ... 1 hosting chứa được bao nhiêu website? Ứng Dụng LMS Trong Đào Tạo Nhân Sự Ngành Làm Đẹp Và Thẩm Mỹ:... ArgoCD là gì? Thông tin chi tiết về ArgoCD Vmmem là gì? Vai trò và cách sử dụng để tối ưu hóa hệ... Kibana là gì? Khái niệm, lợi ích và cách sử dụng hiệu quả DDL là gì? Hướng dẫn cách sử dụng các câu lệnh trong SQL Node mạng là gì? Khái niệm, phân loại và kiến trúc CAA Record là gì? Tác dụng và cách cấu hình chi tiết LogRotate là gì? Hướng dẫn cài đặt và cấu hình hiệu quả nhất Markdown là gì? Tại sao nên dùng cũng như cách sử dụng hiệu quả SPF Record là gì? Khái niệm và cách hoạt động OpenTelemetry là gì? Cách hoạt động và sử dụng DSS là gì? Khái niệm, cách hoạt động và lợi ích mang lại IXP là gì? Khái niệm, cách hoạt động và lợi ích mang lại Global Server Load Balancing (GSLB) là gì? Khái niệm và cách hoạt động C&C Server là gì? Khái niệm, cách hoạt động và ngăn chặn tấn công Jump Server là gì? Khái niệm, cách hoạt động và ưu nhược điểm Vuex là gì? Mục đích sử dụng và tại sao chúng ta lại cần... WebGL là gì? Những thông tin cơ bản cần biết về WebGL Danh mục- Kiến thức cơ bản
- Tin công nghệ
- Dịch vụ Cloud Computing
- Cloud Server
- CDN
- Load Balancer
- Auto Scaling
- Container Registry
- Kubernetes
- Call Center
- Business Email
- Simple Storage
- VOD
- VPN
- Traffic Manager
- Cloud VPS
- Videos
- Tin Tức
- Security
- Development
- Q&A cùng Bizfly Cloud
- Q&A về Bizfly Cloud Server
- Thao tác kết nối tới server
- Videos
- Q&A về Bizfly Business Email
- Videos
- Q&A về Bizfly Cloud Server
- Case Study
- Sys-Ops
- Infographic
- Thủ thuật
- Tool support
- Giải pháp doanh nghiệp
- Chuyển đổi số
- Software Engineering
- Videos
Từ khóa » Trừ Giờ Trong Sql
-
Cách Sử Dụng Hàm DATEDIFF (Transact-SQL) để Trừ 2 Khoảng Thời ...
-
Hàm DATEDIFF Trong SQL Server
-
Hàm Xử Lý DATE/TIME Trong SQL - Phần 1
-
Xử Lý Date Trong SQL - Học Sql Cơ Bản đến Nâng Cao - VietTuts
-
Tính Toán Và Xử Lí Ngày Tháng Bằng Câu Lệnh SQL - Viblo
-
Các Hàm Ngày Tháng, Giờ, Phút, Giây, Cộng Trừ Ngày Tháng Năm Trong ...
-
Hàm Xử Lý DATE/TIME Trong SQL - Phần 2
-
Trừ 2 Ngày Trong Sql Server - Cách Dùng Hàm DATEDIFF (Transact ...
-
Hàm Xử Lý DATE/TIME Trong SQL - Phần 2 - VIETWIKI.VN
-
[NEW] Hàm Xử Lý Date Và Time Trong SQL | Lấy Giờ Trong Sql - Pickpeup
-
Hàm Xử Lý Date Và Time Trong SQL
-
Làm Cách Nào để Tính Chênh Lệch Số Giờ (thập Phân) Giữa Hai Ngày ...