Chuyển đổi kiểu định dạng ngày tháng năm trong SQL Server

14:18 21/03/2024

Trong SQL Server, kiểu dữ liệu “date” được sử dụng để lưu trữ giá trị ngày trong một cột của bảng. Kiểu dữ liệu này chứa ngày mà không bao gồm bất kỳ thông tin thời gian nào khác như giờ, phút hoặc giây.

Một số điểm quan trọng cần biết về kiểu dữ liệu “date” trong SQL Server

1. Định dạng

Kiểu dữ liệu “date” trong SQL Server sử dụng định dạng mặc định theo kiểu ‘yyy-mm-dd’ để biểu diễn một ngày.

Ví dụ: ‘2024-03-01’ là một giá trị hợp lệ cho kiểu dữ liệu “date” trong SQL Server, biểu thị ngày 1 tháng 3 năm 2024.

2. Phạm vi giá trị

Kiểu dữ liệu “date” trong SQL Server có phạm vi giá trị từ ‘0001-01-01’ đến ‘9999-12-31’. Điều này cho phép lưu trữ ngày từ năm 1 đến năm 9999.

3. Tiết kiệm không gian lưu trữ

So với các kiểu dữ liệu khác như “datetime” hoặc “datetime2”, kiểu dữ liệu “date” tiết kiệm không gian lưu trữ bởi vì nó chỉ chứa thông tin về ngày mà không bao gồm thông tin về thời gian.

4. Tính tương thích

Kiểu dữ liệu “date” trong SQL Server tương thích với các chuẩn quốc tế, điều này làm cho nó dễ dàng để làm việc với dữ liệu ngày tháng trong các ứng dụng toàn cầu.

5. Tính chính xác và hiệu suất

Vì kiểu dữ liệu “date” chỉ chứa thông tin về ngày, không có thông tin về thời gian, nên nó rất chính xác và hiệu suất cao khi thực hiện các thao tác liên quan đến ngày trong cơ sở dữ liệu.

6. Sử dụng trong ràng buộc

Kiểu dữ liệu “date” thường được sử dụng trong ràng buộc đảm bảo tính nhất quán và tính chính xác của dữ liệu ngày tháng trong cơ sở dữ liệu.

Khó khăn khi sử dụng định dạng ngày tháng năm mặc định của SQL Server (yyyy-mm-dd)

  • Khó khăn khi truy vẫn dữ liệu

Trong SQL Server, kiểu định dạng ngày tháng năm mặc định thường là yyyy-mm-dd. Mặc dù định dạng này rất phổ biến và dễ đọc, nhưng đôi khi có thể gây khó khăn khi sử dụng, đặc biệt khi phải tương tác với dữ liệu từ các nguồn khác nhau hoặc cần hiển thị dữ liệu theo định dạng khác. Dưới đây là một ví dụ minh họa:

SELECT OrderDate FROM Orders

Ví dụ: Giả sử bạn có một bảng “Orders” trong đó cột “OrderDate” lưu trữ ngày đặt hàng. Khi truy vấn dữ liệu từ bảng này và muốn hiển thị ngày đặt hàng theo định dạng dd/mm/yyyy để phù hợp với định dạng ngày tháng phổ biến tại một số quốc gia, bạn có thể gặp khó khăn.

  • Khi insert dữ liệu kiểu date trong SQL Server với dạng dd-mm-yyyy vào một cột có kiểu dữ liệu mặc định là yyyy-mm-dd, có một số khó khăn có thể phát sinh:

1. Lỗi chuyển đổi dữ liệu: Khi thực hiện INSERT, SQL Server sẽ cố gắng chuyển đổi giá trị ngày tháng dạng dd-mm-yyyy thành kiểu dữ liệu “date” theo định dạng mặc định yyyy-mm-dd. Nếu không có quá trình chuyển đổi đúng đắn, lỗi sẽ xảy ra và INSERT sẽ thất bại.

2. Hiểu nhầm dữ liệu: Trong môi trường quốc tế, ngày tháng có thể được biểu diễn theo nhiều định dạng khác nhau. Sử dụng kiểu dữ liệu mặc định yyyy-mm-dd có thể dẫn đến hiểu nhầm dữ liệu nếu người dùng nhập ngày tháng theo định dạng khác mà không có sự chuyển đổi đúng đắn.

3. Rủi ro về tính chính xác: Nếu không có quá trình kiểm tra và chuyển đổi đúng đắn, dữ liệu có thể bị nhập sai vào cơ sở dữ liệu. Điều này có thể dẫn đến những vấn đề liên quan đến tính chính xác và nhất quán của cơ sở dữ liệu.

4. Phức tạp khi xử lý dữ liệu: Khi phải xử lý dữ liệu ngày tháng từ nhiều nguồn khác nhau, việc chuyển đổi dữ liệu giữa các định dạng khác nhau có thể trở nên phức tạp và dễ gây lỗi nếu không có quy trình chuyển đổi đồng nhất.

Thay đổi định dạng kiểu Date trong SQL

  • Sử dụng SET DATEFORMAT

Chúng ta có thể sử dụng câu lệnh SET DATEFORMAT trong SQL Server để thay đổi định dạng ngày tháng năm tạm thời.

SET DATEFORMAT {format};

Câu lệnh SET DATEFORMAT trong SQL Server được sử dụng để thiết lập định dạng ngày tháng mặc định cho phiên làm việc hiện tại. Khi bạn thiết lập định dạng ngày tháng, SQL Server sẽ sử dụng định dạng này để hiểu và chuyển đổi các giá trị ngày tháng trong các truy vấn hoặc câu lệnh khác.

Trong đó:

{format} là định dạng ngày tháng mà bạn muốn thiết lập. Định dạng này có thể là một trong các giá trị sau:

mdy: tháng/ngày/năm.

dmy: ngày/tháng/năm.

ymd: năm/tháng/ngày.

ydm: năm/ngày/tháng.

myd: tháng/năm/ngày.

dym: ngày/tháng/năm.

SET DATEFORMAT dmy;

Khi thiết lập định dạng này, SQL Server sẽ hiểu rằng các giá trị ngày tháng trong các truy vấn sẽ được nhập theo định dạng ‘dd/mm/yyyy’.

Ví dụ:

Nhập dữ liệu không có sử dụng formatdate:

DECLARE @datevar DATETIME2 = ’31/12/2023′;  

SELECT @datevar;

Khi có sử dụng formatdate hệ thống sẽ không hiểu sai dữ liệu của chúng ta nhập vào, mà nó sẽ tự động chuyển đổi dữ liệu của chúng ta sang định dạng mặc định của hệ thống:

 

  • Sử dụng CAST

Chúng ta sử dụng hàm CAST để chuyển đổi ngày thành một chuỗi và hiển thị nó dưới dạng mm/dd/yyyy.

Ví dụ: 

SELECT CAST(OrderDate AS VARCHAR(11)) 

AS FormattedDate

FROM Orders;

Câu lệnh SET DATEFORMAT là một công cụ hữu ích để thiết lập định dạng ngày tháng mặc định trong SQL Server, giúp đảm bảo rằng các truy vấn và thao tác với dữ liệu ngày tháng được thực hiện theo đúng định dạng mong muốn. Tuy nhiên, việc sử dụng nó cần được cân nhắc và kiểm soát để tránh hiểu nhầm và lỗi trong dữ liệu.

Giảng viên Hoàng Quốc Việt
Bộ môn Ứng dụng phần mềm
FPT Polytechnic Hà Nội

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.