Vous pouvez simplement ajouter les deux.
- si le
Time part
de votre Date
colonne est toujours nul
- et le
Date part
de votre Time
colonne est également toujours nul (date de base: 1er janvier 1900)
Leur ajout renvoie le résultat correct.
SELECT Combined = MyDate + MyTime FROM MyTable
Justification (bravo à ErikE / dnolan)
Cela fonctionne comme cela en raison de la façon dont la date est stockée sur deux octets,
Integers
les 4 octets gauches étant les date
4 octets droits étant les time
. C'est comme faire$0001 0000 + $0000 0001 =
$0001 0001
Modifier concernant les nouveaux types SQL Server 2008
Date
et Time
sont des types introduits dans SQL Server 2008
. Si vous insistez pour ajouter, vous pouvez utiliserCombined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Edit2 concernant la perte de précision dans SQL Server 2008 et versions ultérieures (bravo à 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.
Lieven Keersmaekers
la source
1900-01-01
, non?float
. Où diable avez-vous appris cela? Ils sont stockés sous forme d' entiers : la partie date est le nombre de jours depuis une date d'ancrage, et la partie heure est le nombre de "ticks" depuis minuit, les ticks étant définis comme 1/300 s pourdatetime
et plus précis pourtime
etdatetime2
.Si l'élément de temps de votre colonne de date et l'élément de date de votre colonne de temps sont tous deux nuls, 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é:
la source
The data types datetime and time are incompatible in the add operator.
Il s'agit d'une solution alternative sans aucune conversion de caractères:
Vous n'obtiendrez que des millisecondes de cette façon, mais ce serait normalement OK. J'ai testé cela dans SQL Server 2008.
la source
Cela a fonctionné pour moi
(sur SQL 2008 R2)
la source
Si vous n'utilisez pas SQL Server 2008 (c'est-à-dire que vous ne disposez que d'un type de données DateTime), vous pouvez utiliser le TSQL suivant (certes approximatif et prêt) pour obtenir ce que vous voulez:
C'est rude et prêt, mais ça marche!
la source
Si vos deux champs sont datetime, il suffit de les ajouter.
par exemple:
Si vous avez utilisé le type de données Date et heure, convertissez simplement l'heure en date et heure
par exemple:
la source
Convertissez la première date stockée dans un champ datetime en chaîne, puis convertissez l'heure stockée dans un champ datetime en chaîne, ajoutez les deux et reconvertissez en champ datetime en utilisant tous les formats de conversion connus.
la source
J'ai eu beaucoup d'erreurs comme indiqué ci-dessus, donc je l'ai fait comme ça
Ça a marché pour moi.
la source
Convertissez les deux champs en DATETIME:
et si vous utilisez,
Getdate()
utilisez d'abord:la source
Tirages:
la source
Fonctionne comme un charme
la source
SELECT CAST (CAST (@DateField As Date) As DateTime) + CAST (CAST (@TimeField As Time) As DateTime)
la source
Une autre façon consiste à utiliser
CONCAT
etCAST
, soyez conscient, que vous devez utiliserDATETIME2(x)
pour le faire fonctionner. Vous pouvez définirx
n'importe quoi entre ce qui0-7
7
signifie aucune perte de précision.Retour
2018-03-12 07:00:00.0000000
Testé sur SQL Server 14
la source
Pour combiner la date d'une colonne datetime et l'heure d'une autre colonne datetime, c'est la meilleure solution la plus rapide pour vous:
la source
J'ai rencontré une situation similaire où j'ai dû fusionner les champs Date et Heure avec le champ DateTime. Aucune des solutions mentionnées ci-dessus ne fonctionne, en particulier l'ajout de deux champs car le type de données pour l'ajout de ces 2 champs n'est pas le même.
J'ai créé la solution ci-dessous, où j'ai ajouté une partie heure puis minute à la date. Cela a très bien fonctionné pour moi. Veuillez le vérifier et faites-moi savoir si vous rencontrez des problèmes.
; avec tbl as (sélectionnez StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 7/24/2019 12:00:00 AM ') sélectionnez DATEADD (MI, DATEPART (MINUTE, CAST (tbl .StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME)), CAST (tbl.StatusDate as DATETIME))) from tbl
Résultat: 2019-07-24 17: 17: 00.000
la source