Đôi khi khi làm việc với cơ sở dữ liệu và các môi trường lập trình khác, bạn nhận được giá trị ngày nhưng nó ở định dạng / kiểu dữ liệu sai. Ví dụ:nếu một ngày đã được tạo bằng một hàm ngày có sẵn, thì nó có thể bao gồm cả ngày và giờ, cho đến tận nano giây cuối cùng. Và tất cả những gì bạn muốn là ngày, tháng và năm, giả sử như sau:2018-01-01.
Nếu điều này xảy ra khi bạn đang sử dụng SQL Server, bạn có thể sử dụng CONVERT()
chức năng chuyển đổi nó sang một kiểu dữ liệu khác. Khi bạn làm điều này, kiểu dữ liệu sẽ xác định định dạng mà nó xuất hiện.
Bài viết này cung cấp các ví dụ về việc sử dụng CONVERT()
trong SQL Server để chuyển đổi giá trị ngày tháng sang kiểu dữ liệu (ngày tháng) khác.
Cú pháp
Đầu tiên, đây là cách cú pháp chính thức hoạt động:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
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
. -
style
- Một biểu thức số nguyên chỉ định cách
CONVERT()
hàm sẽ dịch biểu thức . Đối với giá trị kiểu là NULL, NULL được trả về. data_type xác định phạm vi.
Ví dụ 1 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu ngày
Trong ví dụ này, chúng tôi tạo ngày / giờ hiện tại với SYSDATETIME()
và chuyển đổi nó thành 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, CONVERT(date, SYSDATETIME()) AS Converted;
Kết quả:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-06 22:53:47.2318751 | 2018-06-06 | +-----------------------------+-------------+
Ví dụ 2 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu smalldatetime
Trong ví dụ này, chúng tôi chuyển đổi ngày thành smalldatetime kiểu dữ liệu.
SELECT SYSDATETIME() AS Original, CONVERT(smalldatetime, SYSDATETIME()) AS Converted;
Kết quả:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-06 22:56:51.6873250 | 2018-06-06 22:57:00 | +-----------------------------+---------------------+
Ví dụ 3 - Chuyển đổi từ SYSDATETIME () sang Kiểu dữ liệu datetimeoffset
Trong ví dụ này, chúng tôi chuyển đổi ngày thành datetimeoffset kiểu dữ liệu.
SELECT SYSDATETIME() AS Original, CONVERT(datetimeoffset, SYSDATETIME()) AS Converted;
Kết quả:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 09:17:15.2410693 | 2018-06-07 09:17:15.2410693 +00:00 | +-----------------------------+------------------------------------+
Ví dụ 4 - Chuyển đổi từ kiểu dữ liệu SYSDATETIME () sang time
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ể chuyển đổi nó thành 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, CONVERT(time, SYSDATETIME()) AS Converted;
Kết quả:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-06 23:01:41.7070775 | 23:01:41.7070775 | +-----------------------------+------------------+
Ví dụ 5 - Chuyển đổi từ SYSDATETIMEOFFSET ()
Các ví dụ trước đều sử dụng cùng một hàm có sẵn để tạo giá trị ngày / giờ, nhưng tất nhiên, nó không cần được tạo bởi một hàm này. Đây là một ví dụ sử dụng SYSDATETIMEOFFSET()
:
SELECT SYSDATETIMEOFFSET() AS Original, CONVERT(date, SYSDATETIMEOFFSET()) AS Converted;
Kết quả:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 09:12:27.3660685 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Ví dụ 6 - Chuyển đổi từ Truy vấn Cơ sở dữ liệu
Dưới đây là một ví dụ về chuyển đổi ngày được truy xuất từ một cột trong cơ sở dữ liệu mẫu WideWorldImporters:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CONVERT(date, LastEditedWhen) 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 | +-----------------------------+-------------+
Lưu ý rằng bạn không bị giới hạn khi chỉ chuyển đổi giữa hai định dạng ngày khác nhau. Ví dụ:nếu bạn có một ngày được lưu trữ dưới dạng chuỗi, bạn cũng có thể sử dụng CONVERT()
để chuyển đổi từ một chuỗi thành một ngày, cũng như bất kỳ loại dữ liệu nào khác mà bạn có thể cần chuyển đổi sang.
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 CAST()
sử dụng các ví dụ tương tự như trên.