Bài viết này chứa các ví dụ về chuyển đổi ngày giá trị thành bộ datetimeoffset giá trị trong SQL Server.
Khi bạn chuyển đổi ngày giá trị thành datetimeoffset , thông tin bổ sung được thêm vào giá trị. Điều này là do bộ datetimeoffset kiểu dữ liệu chứa cả thông tin ngày và giờ, cũng như thông tin bù thời gian. Nói cách khác, bộ datetimeoffset kiểu dữ liệu xác định ngày được kết hợp với thời gian trong ngày có nhận biết múi giờ và dựa trên đồng hồ 24 giờ. Ngày mặt khác, kiểu dữ liệu chỉ chứa thông tin ngày tháng.
Khi chúng tôi chuyển đổi từ ngày đến datetimeoffset , thời gian (và độ lệch múi giờ) được tự động thêm vào giá trị. Tuy nhiên, bạn luôn có thể thay đổi giá trị nếu được yêu cầu (bao gồm cả độ lệch múi giờ).
datetimeoffset kiểu dữ liệu cũng cho phép bạn chỉ định độ chính xác của phân số giây. Nếu bạn không chỉ định điều này, nó sẽ sử dụng thang điểm 7. Điều này có nghĩa là nó sẽ bao gồm 7 chữ số ở phía bên phải của dấu thập phân.
Ví dụ 1 - Chuyển đổi ngầm định
Dưới đây là ví dụ về chuyển đổi ngầm định giữa ngày và datetimeoffset .
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
Đây là một chuyển đổi ngầm định bởi vì chúng tôi không sử dụng một hàm chuyển đổi (như những hàm bên dưới) để chuyển đổi nó một cách rõ ràng. Trong trường hợp này, SQL Server thực hiện một chuyển đổi ẩn đằng sau hậu trường khi chúng tôi cố gắng chỉ định ngày giá trị thành bộ datetimeoffset biến.
Chúng ta có thể thấy rằng ngày biến chỉ chứa thông tin ngày tháng, trong khi đó, tập hợp ngày giờ biến chứa thông tin bù ngày, giờ và múi giờ.
Khi bạn chuyển đổi giữa ngày và datetimeoffset (7) (tức là sử dụng thang điểm 7), thành phần thời gian được đặt thành 00:00:00.0000000 +00:00
. Đây cũng là giá trị mặc định, vì vậy bạn có thể bỏ qua giá trị chính xác và nó sẽ sử dụng thang điểm 7 (dẫn đến độ chính xác là 34). Bạn có thể giảm độ chính xác nếu muốn. Giảm độ chính xác cũng có thể làm giảm lượng không gian cần thiết để lưu trữ giá trị.
Chỉ cần rõ ràng, thang đo là số chữ số ở bên phải dấu thập phân của một số. Độ chính xác là tổng số chữ số trong số.
Ví dụ 2 - Chuyển đổi rõ ràng bằng CAST ()
Dưới đây là một ví dụ về chuyển đổi rõ ràng. Trong trường hợp này, tôi sử dụng CAST()
hoạt động trực tiếp trong SELECT
tuyên bố để chuyển đổi rõ ràng giữa ngày và datetimeoffset .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
Vì vậy, chúng tôi nhận được kết quả tương tự như chuyển đổi ngầm định.
Chúng tôi cũng có thể điều chỉnh thời gian như sau:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Lưu ý rằng bạn không thể sử dụng DATEADD()
chức năng sửa đổi thành phần bù thời gian. Nhưng đừng lo lắng, có có một cách để sửa đổi nó (đọc để tìm hiểu cách thực hiện).
Ví dụ 3 - Chuyển đổi rõ ràng bằng CONVERT ()
Dưới đây là một ví dụ về chuyển đổi rõ ràng bằng cách sử dụng CONVERT()
hàm thay vì CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetimeoffset, @thedate) AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
Và điều chỉnh thời gian:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Ví dụ 4 - Sửa đổi Khoảng cách Thời gian
Trong các ví dụ trước, chúng tôi đã sử dụng DATEADD()
chức năng sửa đổi giá trị thời gian. Chức năng này có thể được sử dụng để sửa đổi bất kỳ phần nào của thành phần ngày hoặc giờ, ngoại trừ thành phần bù thời gian .
Nếu bạn cần sửa đổi độ lệch thời gian, bạn có thể sử dụng TODATETIMEOFFSET()
hàm số. Bạn cũng có thể sử dụng chức năng này để chuyển đổi ngày ban đầu giá trị thành bộ datetimeoffset giá trị. Hàm này chấp nhận một giá trị ngày tháng (có thể phân giải thành datetime2 giá trị) và một giá trị bù đắp.
Đây là một ví dụ:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset SET @thedate = '2020-12-01' SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00') SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
Và đây là một ví dụ sử dụng hàm trong SELECT
tuyên bố:
DECLARE @thedate date = '2020-12-01' SELECT @thedate AS 'date', TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
Kết quả:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
TODATETIMEOFFSET()
hàm cũng chấp nhận một bộ datetimeoffset giá trị làm tham số đầu tiên của nó, vì vậy bạn cũng có thể sử dụng nó để sửa đổi datetimeoffset hiện có giá trị nếu được yêu cầu.
Ví dụ:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset', TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
Kết quả:
+------------+------------------------------------+------------------------------------+ | date | datetimeoffset | Modified | |------------+------------------------------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+------------------------------------+