Учитывая следующие компоненты
DECLARE @D DATE = '2013-10-13'
DECLARE @T TIME(7) = '23:59:59.9999999'
Как лучше всего объединить их, чтобы получить DATETIME2(7)
результат со стоимостью '2013-10-13 23:59:59.9999999'
?
Некоторые вещи, которые не работают, перечислены ниже.
SELECT @D + @T
Дата типа данных операнда недопустима для оператора добавления.
SELECT CAST(@D AS DATETIME2(7)) + @T
Тип данных операнда datetime2 недопустим для оператора добавления.
SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D)
Функция datediff привела к переполнению. Число частей даты, разделяющих два экземпляра даты / времени, слишком велико. Попробуйте использовать datediff с менее точной частью даты.
* Переполнения можно избежать в базе данных SQL Azure и SQL Server 2016, используя DATEDIFF_BIG
.
SELECT CAST(@D AS DATETIME) + @T
Типы данных datetime и time несовместимы в операторе добавления.
SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME)
Возвращает результат, но теряет точность
2013-10-13 23:59:59.997