Comment convertir un datetime en string dans T-SQL

Je suis surpris de ne pas pouvoir find cette question ici déjà.

J'ai une date et une heure var et je veux le convertir en une string afin que je puisse l'append à une autre string. Je le veux dans un format qui peut être facilement converti en une date et heure.

Comment puis-je faire ceci?

(Je veux la partie date et la partie time.)

La requête suivante obtiendra le datetime actuel et convertira en string. avec le format suivant
yyyy-mm-dd hh:mm:ss(24h)

 SELECT convert(varchar(25), getdate(), 120) 
  • SQLFiddle Demo
  • Formats de date SQL Server

Il existe plusieurs façons de convert un datetime en string. Voici une façon:

 SELECT convert(varchar(25), getdate(), 121) – yyyy-mm-dd hh:mm:ss.mmm 

Voir la démo

Voici un site Web répertoriant toutes les conversions:

Comment mettre en forme datetime et date dans SQL Server

Vous pouvez utiliser l'instruction convert dans Microsoft SQL Server pour convertir une date en string. Un exemple de la syntaxe utilisée serait:

 SELECT convert(varchar(20), getdate(), 120) 

Ce qui précède renvoie la date et l'heure actuelles dans une string au format YYYY-MM-DD HH:MM:SS dans une horloge de 24 heures.

Vous pouvez changer le nombre à la fin de l'instruction à l'un des nombreux qui va changer le format des strings returnnées. Une list de ces codes peut être trouvée sur le MSDN dans la section de reference CAST et CONVERT .

Il y a 3 methods différentes selon ce que je veux et quelle version j'utilise.

Voici les methods ..

1) Utiliser Convert

 DECLARE @DateTime DATETIME = GETDATE(); --Using Convert SELECT CONVERT(NVARCHAR, @DateTime,120) AS 'myDateTime' ,CONVERT(NVARCHAR(10), @DateTime, 120) AS 'myDate' ,RIGHT(CONVERT(NVARCHAR, @DateTime, 120),8) AS 'myTime' 

2) Utilisation de Cast (SQL Server 2008 et au-delà)

 SELECT CAST(@DateTime AS DATETIME2) AS 'myDateTime' ,CAST(@DateTime AS DATETIME2(3)) AS 'myDateTimeWithPrecision' ,CAST(@DateTime AS DATE) AS 'myDate' ,CAST(@DateTime AS TIME) AS 'myTime' ,CAST(@DateTime AS TIME(3)) AS 'myTimeWithPrecision' 

3) Utilisation du type de données de caractères de longueur fixe

 DECLARE @myDateTime NVARCHAR(20) = CONVERT(NVARCHAR, @DateTime, 120); DECLARE @myDate NVARCHAR(10) = CONVERT(NVARCHAR, @DateTime, 120); SELECT @myDateTime AS 'myDateTime' ,@myDate AS 'myDate' 

En plus des fonctions CAST et CONVERT dans les réponses précédentes, si vous utilisez SQL Server 2012 et DATETIME vous utilisez la fonction FORMAT pour convertir un DATETIME basé sur DATETIME en string.

Pour reconvertir, utilisez les fonctions PARSE ou TRYPARSE .

Les styles de mise en forme sont basés sur .NET (similaire aux options de mise en forme de string de la méthode ToSsortingng ()) et ont l'avantage d'être adaptés à la culture. par exemple.

 DECLARE @DateTime DATETIME2 = SYSDATETIME(); DECLARE @SsortingngResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture DECLARE @SsortingngResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') SELECT @DateTime SELECT @SsortingngResult1, @SsortingngResult2 SELECT PARSE(@SsortingngResult1 AS DATETIME2) SELECT PARSE(@SsortingngResult2 AS DATETIME2 USING 'en-gb') 

Résultats:

 2015-06-17 06:20:09.1320951 6/17/2015 6:20 AM 17/06/2015 06:20 2015-06-17 06:20:00.0000000 2015-06-17 06:20:00.0000000 

Vérifiez la syntaxe CAST et CONVERT de t-sql:

http://msdn.microsoft.com/en-us/library/ms187928.aspx

Essayez ci-dessous:

 DECLARE @myDateTime DATETIME SET @myDateTime = '2013-02-02' -- Convert to ssortingng now SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)