目次
1. Tổng quan về hàm NOW của MySQL
Hàm NOW của MySQL được sử dụng để dễ dàng lấy ngày và thời gian hiện tại trong cơ sở dữ liệu. Bằng cách tận dụng hàm NOW, bạn có thể lấy thông tin thời gian hữu ích cho dấu thời gian khi chèn dữ liệu và ghi log. Dù đơn giản nhưng là công cụ rất mạnh, được sử dụng rộng rãi.Cú pháp cơ bản của hàm NOW
Cú pháp của hàm NOW rất đơn giản. Bạn có thể lấy ngày giờ hiện tại bằng truy vấn sau.SELECT NOW();
Kết quả thực thi sẽ được trả về dưới dạng YYYY-MM-DD HH:MM:SS
. Ví dụ, nếu là 16:30 ngày 24 tháng 10 năm 2024, kết quả sẽ như sau.2024-10-24 16:30:00
Ngoài ra, hàm NOW trả về ngày giờ hiện tại dựa trên múi giờ của cơ sở dữ liệu. Điều này cho phép quản lý thời gian thống nhất trên toàn hệ thống.Các trường hợp sử dụng hàm NOW
Hàm NOW đặc biệt hữu ích trong các tình huống sau.- Ghi log: Tự động ghi lại thời gian thay đổi và chèn dữ liệu.
- Dấu thời gian: Được sử dụng để ghi lại thời điểm hành động của người dùng.
- Lọc dựa trên thời gian: Khi cần trích xuất dữ liệu xảy ra trong một khoảng thời gian nhất định.
2. Ví dụ cơ bản sử dụng hàm NOW
Hãy xem một ví dụ cơ bản sử dụng hàm NOW để lấy ngày và giờ hiện tại.SELECT NOW();
Câu truy vấn này trả về ngày và giờ hiện tại. Ngoài việc lấy dưới dạng chuỗi, bạn cũng có thể lấy dưới dạng số. Khi sử dụng câu truy vấn sau, ngày và giờ hiện tại sẽ được trả về dưới dạng số (YYYYMMDDHHMMSS
) .SELECT NOW() + 0;
Ví dụ, kết quả sẽ trả về như “20241024163000”, rất tiện khi xử lý dưới dạng số.Xác định độ chính xác phần thập phân giây
Trong hàm NOW, bạn có thể chỉ định độ chính xác của phần thập phân giây. Độ chính xác được chỉ định qua đối số như sau.SELECT NOW(3);
Câu truy vấn này trả về kết quả với độ chính xác 3 chữ số thập phân sau dấu chấm. Ví dụ, dạng “2024-10-24 16:30:00.123”. Đây là tính năng rất hữu ích cho các hệ thống yêu cầu độ chính xác tính bằng giây.3. Sự khác nhau giữa SYSDATE() và NOW()
Có hàm SYSDATE() tương tự như hàm NOW, nhưng chúng hoạt động hơi khác nhau。- NOW(): Lấy thời gian tại thời điểm thực thi truy vấn và giữ cùng một thời gian cho toàn bộ câu lệnh. Ngay cả khi giao dịch kéo dài lâu, nó vẫn trả về cùng một kết quả。
- SYSDATE(): Lấy thời gian tại thời điểm hiện tại ở mỗi bước của truy vấn. Nghĩa là, ngay cả trong giao dịch kéo dài lâu, thời gian thực sẽ được lấy。
Ví dụ về sự khác nhau trong truy vấn
Dưới đây là ví dụ truy vấn minh họa sự khác nhau giữa SYSDATE() và NOW()。SELECT NOW(), SYSDATE();
Kết quả sẽ như sau。NOW(): 2024-10-24 16:30:00
SYSDATE(): 2024-10-24 16:30:01> 2024-10-24 16:30:01
Khoảng thời gian chênh lệch tại thời điểm truy vấn được thực thi được phản ánh trong SYSDATE(), trong khi NOW() giữ thời gian bắt đầu thực thi truy vấn. Như vậy, mặc dù cách hoạt động của chúng hơi khác nhau, việc chọn hàm phù hợp tùy thuộc vào cách sử dụng là quan trọng。4. Ví dụ ứng dụng của hàm NOW
Hàm NOW rất hữu ích trong một số kịch bản nhất định. Ví dụ, nếu muốn tự động ghi lại thời gian dữ liệu được chèn, bạn có thể sử dụng hàm NOW như sau.INSERT INTO users (username, created_at)
VALUES ('example_user', NOW());
Nhờ đó, thời gian hiện tại sẽ tự động được ghi vào cột created_at
khi chèn bản ghi. Tính năng này đặc biệt hữu ích trong việc ghi log và theo dõi sự kiện. Thêm nữa, nếu muốn trích xuất dữ liệu được tạo trong 7 ngày qua, bạn có thể sử dụng hàm NOW như sau.SELECT * FROM orders
WHERE order_date >= NOW() - INTERVAL 7 DAY;
Truy vấn này sẽ lấy tất cả các bản ghi được tạo trong 7 ngày qua tính từ thời gian hiện tại. Hàm NOW rất hiệu quả trong việc trích xuất dữ liệu phụ thuộc vào thời gian.5. Lưu ý về hàm NOW
Khi sử dụng hàm NOW, có một số điểm cần lưu ý. Đặc biệt, vì có thể ảnh hưởng đến tính toàn vẹn của giao dịch, nên cần chú ý đến ngữ cảnh sử dụng.- Hoạt động trong giao dịch: Hàm NOW trả về kết quả nhất quán trong giao dịch, vì vậy ngay cả trong quá trình xử lý lâu dài cũng sẽ trả về cùng một thời điểm. Điều này quan trọng để duy trì tính toàn vẹn dữ liệu. Tuy nhiên, nếu cần thời gian thực, việc sử dụng SYSDATE() sẽ phù hợp hơn.