Bài viết này chứa các ví dụ về chuyển đổi ngày giá trị thành ngày giờ giá trị trong SQL Server.
Khi bạn chuyển đổi ngày giá trị thành datetime , thông tin bổ sung được thêm vào giá trị. Điều này là do ngày giờ kiểu dữ liệu chứa cả thông tin ngày và giờ. Ngày mặt khác, kiểu dữ liệu chỉ chứa thông tin ngày tháng.
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à ngày giờ .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Đây là một chuyển đổi ngầm định vì chúng tôi không sử dụng một chức năng chuyển đổi (như những chức năng 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 ngày giờ 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 đó, ngày giờ biến chứa cả thông tin ngày và giờ.
Khi bạn chuyển đổi giữa ngày và ngày giờ , thành phần thời gian được đặt thành 00:00:00.000
. Điều này là do giá trị ngày không chứa bất kỳ thông tin thời gian nào, do đó, SQL Server không có cách nào để biết bạn muốn mấy giờ (nếu có).
Ví dụ 2 - Sửa đổi thời gian
Nếu bạn cần thay đổi thời gian (nhưng giữ nguyên ngày), bạn có thể sử dụng DATEADD()
chức năng để làm điều đó.
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SET @thedatetime = DATEADD(hour, 8, @thedatetime) SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Ví dụ 3 - 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à ngày giờ .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
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, 8, CAST(@thedate AS datetime)) AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Ví dụ 4 - 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(datetime, @thedate) AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Và điều chỉnh thời gian:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Kết quả:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+