Trong SQL Server, bạn có thể sử dụng CONVERT()
chức năng chuyển đổi giá trị ngày từ kiểu dữ liệu ngày này sang kiểu dữ liệu ngày khác (hoặc giữa bất kỳ kiểu dữ liệu nào khác cho vấn đề đó). Tuy nhiên, đó không phải là chức năng duy nhất trong hộp công cụ T-SQL để chuyển đổi giữa các kiểu dữ liệu.
CAST()
hàm là một phần của tiêu chuẩn ANSI SQL và nó thực hiện hầu hết những điều CONVERT()
làm. Vì vậy, trong nhiều trường hợp, bạn có tùy chọn trong số các chức năng này mà bạn thích sử dụng.
Nhiều chuyên gia cơ sở dữ liệu thích CAST()
do thực tế là nó là một phần của tiêu chuẩn ANSI SQL, tuy nhiên, những người khác thích CONVERT()
do chức năng bổ sung mà việc triển khai của T-SQL cung cấp (chẳng hạn như có thể cung cấp kiểu ngày tháng).
Trong mọi trường hợp, bài viết này cung cấp các ví dụ về chuyển đổi giữa các định dạng ngày tháng khác nhau bằng cách sử dụng CAST()
.
Cú pháp
Cú pháp như sau:
CAST ( expression AS data_type [ ( length ) ] )
Các đối số này được định nghĩa như sau:
-
expression
- Bất kỳ biểu thức hợp lệ nào.
-
data_type
- Kiểu dữ liệu đích. Điều này bao gồm xml , bigint và sql_variant . Không thể sử dụng kiểu dữ liệu bí danh.
-
length
- Một số nguyên tùy chọn chỉ định độ dài của kiểu dữ liệu đích. Giá trị mặc định là
30
.
Ví dụ 1 - Truyền SYSDATETIME () dưới dạng ngày
Trong ví dụ này, chúng tôi tạo ngày / giờ hiện tại với SYSDATETIME()
hàm và truyền giá trị trả về dưới dạng ngày tháng kiểu dữ liệu.
Lưu ý rằng SYSDATETIME()
tạo giá trị của nó dưới dạng datetime2 (7) kiểu dữ liệu, vì vậy chúng tôi đang chuyển đổi từ kiểu dữ liệu đó sang kiểu dữ liệu khác.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Kết quả:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Ví dụ 2 - Truyền SYSDATETIME () dưới dạng smalldatetime
Trong ví dụ này, chúng tôi chọn ngày dưới dạng smalldatetime kiểu dữ liệu.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Kết quả:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Ví dụ 3 - Truyền SYSDATETIME () dưới dạng datetimeoffset
Trong ví dụ này, chúng tôi chọn ngày dưới dạng datetimeoffset kiểu dữ liệu.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Kết quả:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Ví dụ 4 - Truyền SYSDATETIME () theo thời gian
Bạn không bị giới hạn trong việc hiển thị thành phần ngày của giá trị. Bạn cũng có thể truyền nó dưới dạng thời gian kiểu dữ liệu, để chỉ thành phần thời gian được trả về. Như thế này:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Kết quả:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Ví dụ 5 - Truyền SYSDATETIMEOFFSET () dưới dạng ngày
Dưới đây là một ví dụ sử dụng một hàm khác để tạo giá trị ngày / giờ ban đầu:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Kết quả:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Ví dụ 6 - Chuyển đổi từ Truy vấn Cơ sở dữ liệu
Dưới đây là ví dụ về chuyển đổi ngày được truy xuất từ một cột trong Nhà nhập khẩu WideWorld cơ sở dữ liệu mẫu:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Kết quả:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Tôi cũng đã viết một bài đăng hướng dẫn cách chuyển đổi giữa các định dạng ngày tháng bằng cách sử dụng CONVERT()
sử dụng các ví dụ tương tự như trên.