Skip to content

Comment combiner la date d’un champ avec l’heure d’un autre champ – MS SQL Server

Solution:

Vous pouvez simplement ajouter les deux.

  • si les Time part de votre Date la colonne est toujours à zéro
  • et les Date part de votre Time 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 le date et les 4 octets de droite étant le time. 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.



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.