Trong SQL Server, việc xử lý dữ liệu thời gian là một tác vụ phổ biến. Hệ quản trị cơ sở dữ liệu này cung cấp nhiều hàm tích hợp để lấy thời gian hệ thống và chuyển đổi chúng sang các định dạng chuỗi khác nhau.
1. Lấy thời gian hiện tại của hệ thống
Để lấy ngày và giờ hiện tại, hàm phổ biến nhất là GETDATE(). Ngoài ra, bạn có thể sử dụng CURRENT_TIMESTAMP (chuẩn ANSI SQL) hoặc SYSDATETIME() để có độ chính xác cao hơn.
-- Lấy thời gian hiện tại
SELECT GETDATE() AS NgayGioHienTai;
-- Sử dụng SYSDATETIME để lấy độ chính xác đến phần triệu giây
SELECT SYSDATETIME() AS ThoiGianChinhXac;
2. Trích xuất các thành phần Năm, Tháng, Ngày
SQL Server cung cấp các hàm chuyên biệt hoặc hàm tổng quát DATEPART để lấy từng phần của một giá trị thời gian.
-- Lấy Năm (Year)
SELECT YEAR(GETDATE()) AS Nam;
SELECT DATEPART(YEAR, GETDATE()) AS Nam_DP;
-- Lấy Tháng (Month)
SELECT MONTH(GETDATE()) AS Thang;
SELECT DATEPART(MONTH, GETDATE()) AS Thang_DP;
-- Lấy Ngày (Day)
SELECT DAY(GETDATE()) AS Ngay;
SELECT DATEPART(DAY, GETDATE()) AS Ngay_DP;
3. Phân biệt DATEPART và DATENAME
Cả hai hàm đều dùng để lấy thông tin từ ngày tháng, nhưng kiểu dữ liệu trả về khác nhau:
- DATEPART: Trả về kết quả kiểu số nguyên (Integer).
- DATENAME: Trả về kết quả kiểu chuỗi (Varchar), hữu ích khi lấy tên tháng hoặc tên thứ trong tuần.
-- Trả về số nguyên
SELECT DATEPART(MM, GETDATE()) AS ThangSo;
-- Trả về chuỗi ký tự
SELECT DATENAME(MM, GETDATE()) AS TenThang;
4. Định dạng ngày tháng bằng hàm CONVERT
Hàm CONVERT cho phép chuyển đổi kiểu dữ liệu DATETIME sang VARCHAR với các mã định dạng (styles) cụ thể.
-- Định dạng chuẩn ODBC (yyyy-mm-dd hh:mi:ss)
SELECT CONVERT(VARCHAR, GETDATE(), 120) AS Format_120;
-- Định dạng ISO (yyyymmdd)
SELECT CONVERT(VARCHAR, GETDATE(), 112) AS Format_112;
-- Định dạng ngày/tháng/năm (dd/mm/yyyy)
SELECT CONVERT(VARCHAR, GETDATE(), 103) AS Format_103;
-- Chỉ lấy ngày theo chuẩn ISO (yyyy-mm-dd)
SELECT CONVERT(VARCHAR(10), GETDATE(), 23) AS Format_23;
-- Chỉ lấy giờ (hh:mm:ss)
SELECT CONVERT(VARCHAR, GETDATE(), 108) AS Format_108;
5. Các mã Style phổ biến trong SQL Server
Dưới đây là bảng tổng hợp các mã style thường dùng khi định dạng ngày tháng:
- 120: yyyy-mm-dd hh:mi:ss (24h)
- 112: yyyymmdd
- 111: yyyy/mm/dd
- 101: mm/dd/yyyy
- 103: dd/mm/yyyy
- 105: dd-mm-yyyy
6. Chuyển đổi chuỗi ký tự ngược lại thành kiểu ngày tháng
Khi nhận dữ liệu từ ứng dụng dưới dạng chuỗi, bạn cần chuyển đổi chúng về kiểu DATETIME để thực hiện các phép toán ngày tháng.
-- Chuyển chuỗi văn bản thành kiểu dữ liệu DateTime
SELECT CONVERT(DATETIME, '2023-12-25 14:30:00', 120) AS ChuoiThanhNgay;