Question

Compte tenu des composants suivants

DECLARE @D DATE = '2013-10-13'
DECLARE @T TIME(7) = '23:59:59.9999999'

Quelle est la meilleure façon de les combiner pour produire un DATETIME2(7) Résultat avec valeur '2013-10-13 23:59:59.9999999'?

Certaines choses qui ne le faites pas Les travaux sont répertoriés ci-dessous.


SELECT @D + @T 

La date de type de données de l'opérande n'est pas valide pour l'opérateur ADD.


SELECT CAST(@D AS DATETIME2(7)) + @T 

Le type de données de l'opérande DateTime2 n'est pas valide pour l'opérateur ADD.


SELECT DATEADD(NANOSECOND,DATEDIFF(NANOSECOND,CAST('00:00:00.0000000' AS TIME),@T),@D)

La fonction Dadiff a entraîné un débordement. Le nombre de dateparts séparant deux instances de date / heure est trop important. Essayez d'utiliser DADAIFF avec un DatePart moins précis.

* Le débordement peut être évité dans Azure SQL Database et SQL Server 2016, en utilisant DATEDIFF_BIG.


SELECT CAST(@D AS DATETIME) + @T 

Les types de données datetime et le temps sont incompatibles dans l'opérateur ADD.


SELECT CAST(@D AS DATETIME) + CAST(@T AS DATETIME)

Renvoie un résultat mais perd de la précision 2013-10-13 23:59:59.997

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top