Bài viết này chứa các ví dụ về chuyển đổi smalldatetime giá trị thành ngày giờ giá trị trong SQL Server.
Khi bạn chuyển đổi smalldatetime giá trị thành datetime , giờ và phút được sao chép, giây và giây phân số được đặt thành 0
.
Ví dụ 1 - 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 từ smalldatetime đến ngày giờ .
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Kết quả:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Đầu tiên, chúng ta có thể thấy rằng thesmalldatetime giá trị sử dụng 00
cho thành phần giây, ngay cả khi chúng tôi đặt nó ở 29
một cách rõ ràng . Điều này là do khi sử dụng thesmalldatetime kiểu dữ liệu, giây luôn bằng 0 (và không có giây phân số).
Do đó, khi chúng tôi chuyển đổi giá trị thành datetime , giá trị giây (và giây phân số) được đặt thành không. Có phải chúng tôi vừa chỉ định giá trị ban đầu cho datetime ngay từ đầu, số giây sẽ vẫn nguyên vẹn:
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29' SELECT @thedatetime AS 'thedatetime';
Kết quả:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.000 | +-------------------------+
Không chỉ giây vẫn nguyên vẹn mà còn bất kỳ giây phân số nào cũng sẽ không thay đổi (nhưng chỉ lên đến thang điểm 3):
DECLARE @thedatetime datetime SET @thedatetime = '2031-03-25 11:15:29.123' SELECT @thedatetime AS 'thedatetime';
Kết quả:
+-------------------------+ | thedatetime | |-------------------------| | 2031-03-25 11:15:29.123 | +-------------------------+
Ví dụ 2 - Làm tròn
Đây là những gì sẽ xảy ra nếu chúng tôi đặt thành phần giây thành giá trị cao hơn trước khi gán nó cho smalldatetime loại dữ liệu.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:31' SELECT @thesmalldatetime AS 'thesmalldatetime', CAST(@thesmalldatetime AS datetime) AS 'datetime';
Kết quả:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:16:00 | 2031-03-25 11:16:00.000 | +---------------------+-------------------------+
Vì vậy, thành phần phút hiện được làm tròn thành phút tiếp theo.
Ví dụ 3 - Chuyển đổi rõ ràng bằng CONVERT ()
Điều này giống với ví dụ đầu tiên, ngoại trừ lần này tôi sử dụng CONVERT()
hàm thay vì CAST()
.
DECLARE @thesmalldatetime smalldatetime SET @thesmalldatetime = '2031-03-25 11:15:29' SELECT @thesmalldatetime AS 'thesmalldatetime', CONVERT(datetime, @thesmalldatetime) AS 'datetime';
Kết quả:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Ví dụ 4 - Chuyển đổi ngầm định
Dưới đây là một ví dụ về việc thực hiện điều tương tự, nhưng sử dụng chuyển đổi kiểu ngầm định.
DECLARE @thesmalldatetime smalldatetime, @thedatetime datetime SET @thesmalldatetime = '2031-03-25 11:15:29' SET @thedatetime = @thesmalldatetime SELECT @thesmalldatetime AS 'thesmalldatetime', @thedatetime AS 'datetime';
Kết quả:
+---------------------+-------------------------+ | thesmalldatetime | datetime | |---------------------+-------------------------| | 2031-03-25 11:15:00 | 2031-03-25 11:15:00.000 | +---------------------+-------------------------+
Vì vậy, chúng tôi nhận được cùng một kết quả, bất kể đó là chuyển đổi rõ ràng hay ẩn.
Đây là một chuyển đổi ngầm định vì chúng tôi không sử dụng một hàm chuyển đổi để chuyển đổi một cách rõ ràng. Chúng tôi chỉ đơn giản là chỉ định giá trị từ một biến của một kiểu dữ liệu cho một biến của một kiểu dữ liệu khác. 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 smalldatetime giá trị thành ngày giờ biến.