Cho các thành phần sau
DECLARE @D DATE = '2013-10-13'
DECLARE @T TIME(7) = '23:59:59.9999999'
Cách tốt nhất để kết hợp chúng để tạo ra một DATETIME2(7)
kết quả với giá trị là '2013-10-13 23:59:59.9999999'
gì?
Một số thứ không hoạt động được liệt kê dưới đây.
SELECT @D + @T
Ngày loại dữ liệu toán tử không hợp lệ cho toán tử thêm.
SELECT CAST(@D AS DATETIME2(7)) + @T
Kiểu dữ liệu toán tử datetime2 không hợp lệ cho toán tử thêm.
SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D)
Hàm dateiff dẫn đến tràn. Số lượng ngày tháng phân tách hai trường hợp ngày / thời gian là quá lớn. Cố gắng sử dụng dateiff với một datepart ít chính xác hơn.
* Có thể tránh tràn tràn trong Azure SQL Database và SQL Server 2016, bằng cách sử dụng DATEDIFF_BIG
.
SELECT CAST(@D AS DATETIME) + @T
Các kiểu dữ liệu datetime và time không tương thích trong toán tử add.
SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME)
Trả về kết quả nhưng mất độ chính xác
2013-10-13 23:59:59.997