2016-09-29 4 views
2

J'ai deux colonnes:Deux colonnes nvarchar dans un datetime. MSSQL

date(nvarchar) - it looks like '2015-04-15 00:00:00.000' 
time(nvarchar) - looks like '1899-12-30 11:20:25.000' 

J'ai besoin de fusionner ce dans une colonne (datetime). Comment je pourrais le faire?

Répondre

1

Tout d'abord, ne stockez pas les valeurs de date/heure en tant que caractères. Mais, vous pouvez les convertir et les ajouter:

select cast(datechar as datetime) + cast(right(timechar, 12) as time) 

Je viens de réaliser. Je ne me souviens pas si les formats date/heure par défaut comprennent les secondes fractionnaires. Ce qui suit est plus sûr:

select (convert(datetime, datechar, 121) + 
     convert(time, convert(datetime, timechar, 121)) 
     ) as datetimeval 
+0

L'ajout fonctionne pour différentes datatpes? (date et heure) –

+0

@RaduGheorghiu. . . Je suis surpris que la documentation ne soit pas meilleure, mais j'ai trouvé: "Les opérateurs plus (+) et moins (-) peuvent également être utilisés pour effectuer des opérations arithmétiques sur les valeurs datetime et smalldatetime." La conversion en temps est pour s'assurer qu'il n'y a qu'un composant 'time'; Je suppose que SQL Server le convertit en 'datetime'. –

0

Après avoir ajouté la 3ème colonne ([FullDate]) par exemple, vous pouvez utiliser le code ci-dessous:

UPDATE TABLE 
SET [FullDate] = DATEADD(SECOND, SECOND(TIME), DATEADD(MINUTE, MINUTE(TIME), DATEADD(HOUR, HOUR(TIME), DATE))) 

Vous pouvez faire comme @GordonLinoff mentionné, mais assurez-vous de lancer la pièce time à datetime. Donc, quelque chose comme ça:

UPDATE TABLE 
SET [FullDate] = CAST([date] as DATETIME) + CAST([time] AS DATETIME)