Cách làm việc hiệu quả với ngày và giờ trong MySQL

Cách làm việc hiệu quả với ngày và giờ trong MySQL

Ngày và giờ rất quan trọng, chúng giúp giữ mọi thứ ngăn nắp và là một khía cạnh không thể thiếu của bất kỳ hoạt động phần mềm nào.





Làm việc hiệu quả với chúng trong cơ sở dữ liệu đôi khi có vẻ khó hiểu, cho dù nó hoạt động trên các múi giờ khác nhau, cộng / trừ ngày tháng và các thao tác khác.





Tìm hiểu các hàm MySQL khác nhau có sẵn để dễ dàng xử lý và quản lý ngày / giờ trong cơ sở dữ liệu của bạn.





Làm việc với các múi giờ

Để giúp mọi thứ được chuẩn hóa, bạn chỉ nên làm việc với ngày / giờ theo múi giờ UTC. Mỗi khi bạn thiết lập kết nối với cơ sở dữ liệu MySQL, bạn nên chuyển múi giờ sang UTC, điều này có thể được thực hiện bằng câu lệnh SQL sau:

SET TIME_ZONE = '+0:00'

Vì tất cả các ngày giờ sẽ được lưu trong UTC, bạn luôn biết mình đang làm việc với cái gì, khiến mọi thứ trở nên đơn giản và dễ hiểu hơn.



chơi trò chơi trực tuyến với bạn bè trên các máy tính khác nhau

Khi cần thiết bạn có thể dễ dàng chuyển đổi múi giờ của bất kỳ giá trị ngày giờ / dấu thời gian nào với CONVERT_TZ () Hàm MySQL. Trước tiên, bạn cần biết mức chênh lệch, ví dụ: PST ở bờ biển phía tây của Bắc Mỹ là UTC -08: 00, vì vậy bạn có thể sử dụng:

SELECT CONVERT_TZ('2021-02-04 21:47:23', '+0:00', '-8:00');

Kết quả này trong 2021-02-04 13:47:23 mà là chính xác. Ba đối số được chuyển đến CONVERT_TZ () đầu tiên là datetime / timestamp mà bạn đang bắt đầu (sử dụng ngay bây giờ () cho thời gian hiện tại), thứ hai sẽ luôn là '+0: 00' vì tất cả các ngày được buộc phải tính theo giờ UTC trong cơ sở dữ liệu và ngày cuối cùng là khoảng chênh lệch mà chúng tôi muốn chuyển đổi ngày thành.





Thêm / trừ ngày

Nhiều khi bạn cần thêm vào hoặc trừ ngày, chẳng hạn như nếu bạn cần truy xuất các bản ghi từ một tuần trước, hoặc lên lịch cho một tháng kể từ bây giờ.

Rất may, MySQL có DATE_ADD ()DATE_SUB () làm cho nhiệm vụ này trở nên cực kỳ dễ dàng. Ví dụ: bạn có thể trừ hai tuần kể từ ngày hiện tại bằng câu lệnh SQL:





SELECT DATE_SUB(now(), interval 2 week);

Thay vào đó, nếu bạn muốn thêm ba ngày vào dấu thời gian hiện có, bạn sẽ sử dụng:

SELECT DATE_ADD('2021-02-07 11:52:06', interval 3 day);

Cả hai hàm đều hoạt động giống nhau, đối số đầu tiên là dấu thời gian bạn đang bắt đầu và đối số thứ hai là khoảng thời gian để cộng hoặc trừ. Đối số thứ hai luôn được định dạng giống nhau bắt đầu bằng từ khoảng thời gian theo sau là một giá trị số và chính khoảng thời gian, có thể là bất kỳ giá trị nào sau đây: giây, phút, giờ, ngày, tuần, tháng, quý, năm.

Ví dụ khác, nếu bạn muốn truy xuất tất cả thông tin đăng nhập đã xảy ra trong 34 phút qua, bạn có thể sử dụng câu lệnh SQL như:

SELECT * FROM logins WHERE login_date >= DATE_SUB(now(), interval 45 minute);

Như bạn có thể thấy, điều này sẽ truy xuất tất cả các bản ghi từ đăng nhập bảng có ngày đăng nhập lớn hơn thời gian hiện tại trừ đi 45 phút, hay nói cách khác là 45 phút qua.

Nhận được sự khác biệt giữa các ngày

Đôi khi bạn cần biết khoảng thời gian đã trôi qua giữa hai ngày. Bạn có thể dễ dàng nhận được số ngày giữa hai ngày khác nhau với DATEDIFF , chẳng hạn như câu lệnh SQL bên dưới:

SELECT DATEDIFF(now(), '2020-12-15');

Các DATEDIFF hàm nhận hai đối số, cả hai đều là dấu ngày / giờ và cung cấp số ngày giữa chúng. Ví dụ trên sẽ hiển thị số ngày đã trôi qua từ ngày 15 tháng 12 năm 2020 cho đến hôm nay.

Để có số giây giữa hai ngày, TO_SECONDS () chức năng có thể hữu ích, ví dụ:

SELECT TO_SECONDS(now()) - TO_SECONDS('2021-02-05 11:56:41');

Điều này sẽ dẫn đến số giây giữa hai ngày được cung cấp.

Trích xuất phân đoạn từ ngày

Có nhiều hàm MySQL khác nhau cho phép bạn dễ dàng trích xuất các phân đoạn cụ thể từ các ngày, chẳng hạn như nếu bạn chỉ muốn tháng, ngày trong năm hoặc giờ. Dưới đây là một vài ví dụ về các chức năng như vậy:

SELECT MONTH('2021-02-11 15:27:52'); SELECT HOUR(now()); SELECT DAYOFYEAR('2021-07-15 12:00:00');

Các câu lệnh SQL trên sẽ dẫn đến 02 , giờ hiện tại và 196 vì ngày 15 tháng 9 là ngày thứ 196 trong năm. Dưới đây là danh sách tất cả các hàm trích xuất ngày tháng có sẵn, mỗi hàm chỉ lấy một đối số, ngày tháng được trích xuất từ:

- SECOND()
- MINUTE()
- HOUR()
- DAY()
- WEEK() - Number 0 - 52 defining the week within the year.
- MONTH()
- QUARTER() - Number 1 - 4 defining the quarter of the year.
- YEAR()
- DAYOFYEAR() - The day of the year (eg. Sept 15th = 196).
- LAST_DAY() - The last day in the given month.
- DATE() - The date in YYYY-MM-DD format without the time.
- TIME() The time in HH:II:SS format without the date.
- TO_DAYS() - The number of days since A.D. 0.
- TO_SECONDS() - The number of seconds since A.D. 0.
- UNIX_TIMESTAMP() - The number of seconds since the epoch (Jan 1st, 1970)

Ví dụ: nếu có thể bạn chỉ muốn truy xuất tháng và năm mà tất cả người dùng đã được tạo, bạn có thể sử dụng câu lệnh SQL như:

SELECT id, MONTH(created_at), YEAR(created_at) FROM users;

Điều này sẽ truy xuất tất cả các bản ghi trong người dùng bảng và hiển thị id #, tháng và năm mà mỗi người dùng đã được tạo.

Nhóm các bản ghi theo khoảng ngày

Một cách sử dụng tuyệt vời của các hàm ngày là khả năng nhóm các bản ghi theo khoảng thời gian bằng cách sử dụng NHÓM THEO trong các câu lệnh SQL của bạn. Ví dụ: có thể bạn muốn tổng số lượng tất cả các đơn đặt hàng trong năm 2020 được nhóm lại theo tháng. Bạn có thể sử dụng một câu lệnh SQL như:

SELECT MONTH(created_at), SUM(amount) FROM orders WHERE created_at BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59' GROUP BY MONTH(created_at);

Điều này sẽ truy xuất tất cả các đơn đặt hàng được đặt trong năm 2020, nhóm chúng theo tháng chúng được tạo và trả về 12 bản ghi cho thấy tổng số lượng đã đặt hàng mỗi tháng trong năm.

Xin lưu ý, để có hiệu suất chỉ mục tốt hơn, tốt nhất bạn nên tránh sử dụng các hàm ngày như NĂM() trong mệnh đề WHERE của câu lệnh SQL và thay vào đó sử dụng GIỮA như trong ví dụ trên.

Đừng bao giờ bối rối với ngày một lần nữa

Sử dụng kiến ​​thức trên, giờ đây bạn có thể làm việc, dịch và thực hiện các thao tác theo ngày và giờ trong một loạt các trường hợp sử dụng một cách hiệu quả.

Hãy nhớ luôn sử dụng UTC khi làm việc với ngày tháng để đơn giản hóa và sử dụng các mẹo trên để quản lý hiệu quả ngày tháng trong phần mềm của bạn, cho dù đó là để hoàn thành các phép tính đơn giản hay dễ dàng lấy các báo cáo được nhóm theo khoảng thời gian ngày tháng.

Nếu bạn là người mới làm quen với SQL, hãy đảm bảo xem những các lệnh SQL cơ bản để giúp cải thiện việc sử dụng SQL của bạn.

Đăng lại Đăng lại tiếng riu ríu E-mail Cách tạo Báo cáo và Tài liệu Chuyên nghiệp trong Microsoft Word

Hướng dẫn này kiểm tra các yếu tố của một báo cáo chuyên nghiệp và xem xét cấu trúc, kiểu và hoàn thiện tài liệu của bạn trong Microsoft Word.

Đọc tiếp
Chủ đề liên quan Giới thiệu về tác giả Matt Dizak(18 bài báo đã xuất bản) Xem thêm từ Matt Dizak

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký