Solution:
Vous pouvez simplement ajouter les deux.
- si les
Time part
de votreDate
la colonne est toujours à zéro - et les
Date part
de votreTime
la colonne est également toujours à zéro (date de référence : 1er janvier 1900)
Les ajouter renvoie le résultat correct.
SELECT Combined = MyDate + MyTime FROM MyTable
Justification (félicitations à ErikE/dnolan)
Cela fonctionne comme ceci en raison de la façon dont la date est stockée sous forme de deux
Integers
avec les 4 octets de gauche étant ledate
et les 4 octets de droite étant letime
. C’est comme faire$0001 0000 + $0000 0001 =
$0001 0001
Modifier concernant les nouveaux types de SQL Server 2008
Date
et Time
sont des types introduits dans SQL Server 2008
. Si vous insistez pour ajouter, vous pouvez utiliser Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 concernant la perte de précision dans SQL Server 2008 et versions ultérieures (félicitations à Martin Smith)
Jetez un œil à Comment combiner la date et l’heure à datetime2 dans SQL Server ? pour éviter toute perte de précision à l’aide de SQL Server 2008 et versions ultérieures.
Si l’élément de temps de votre colonne de date et l’élément de date de votre colonne de temps est à la fois nul, alors la réponse de Lieven est ce dont vous avez besoin. Si vous ne pouvez pas garantir que ce sera toujours le cas, cela devient un peu plus compliqué :
SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) +
DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column)
FROM your_table
Il s’agit d’une solution alternative sans aucune conversion de caractères :
DATEADD(ms, DATEDIFF(ms, '00:00:00', [Time]), CONVERT(DATETIME, [Date]))
Vous n’obtiendrez ainsi qu’une précision de quelques millisecondes, mais ce serait normalement OK. J’ai testé cela dans SQL Server 2008.