111 votes

Comment convertir une date en chaîne de caractères en T-SQL ?

Je suis surpris de ne pas avoir trouvé cette question ici.

J'ai une variable de date et d'heure et je veux la convertir en une chaîne de caractères afin de pouvoir l'ajouter à une autre chaîne. Je veux que ce soit dans un format qui puisse être facilement reconverti en date et heure.

Comment puis-je le faire ?

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

180voto

John Woo Points 132738

La requête suivante récupère la date actuelle et la convertit en chaîne de caractères au format suivant
yyyy-mm-dd hh:mm:ss(24h)

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

37voto

bluefeet Points 105508

Il existe de nombreuses manières différentes de convert a datetime à une chaîne de caractères. Voici une façon de procéder :

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

Ver Démo

Voici un site web qui contient une liste de toutes les conversions :

Comment formater une date et une heure dans un serveur SQL ?

11voto

g2server Points 3299

En plus de la CAST y CONVERT dans les réponses précédentes, si vous utilisez SQL Server 2012 et supérieur, vous utilisez les fonctions FORMAT pour convertir un DATETIME en une chaîne de caractères.

Pour reconvertir, utilisez l'inverse PARSE o TRYPARSE fonctions.

Les styles de formatage sont basés sur .NET (similaires aux options de formatage des chaînes de la méthode ToString()) et ont l'avantage de tenir compte de la culture, par exemple.

DECLARE @DateTime DATETIME2 = SYSDATETIME();
DECLARE @StringResult1 NVARCHAR(100) = FORMAT(@DateTime, 'g') --without culture
DECLARE @StringResult2 NVARCHAR(100) = FORMAT(@DateTime, 'g', 'en-gb') 
SELECT @DateTime
SELECT @StringResult1, @StringResult2
SELECT PARSE(@StringResult1 AS DATETIME2)
SELECT PARSE(@StringResult2 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

11voto

SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - US - MM/JJ/AAAA

108 - Heure - HH:MI:SS

112 - Date - YYYYMMDD

121 - ODBC - YYYY-MM-DD HH:MI:SS.FFF

20 - ODBC - YYYY-MM-DD HH:MI:SS

10voto

Todd.J.Hayden Points 11

Il existe trois méthodes différentes, en fonction de mes besoins et de la version que j'utilise.

Voici les méthodes..

1) Utilisation de 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 d'un type de données de type caractère à 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'

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X