web-dev-qa-db-fra.com

Comment convertir une date/heure en chaîne dans T-SQL

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

J'ai une date time var et je veux le convertir en chaîne afin de pouvoir l'ajouter à une autre chaîne. Je le veux dans un format qui peut être facilement converti en une date.

Comment puis-je faire ceci?

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

78
cja

La requête suivante obtiendra l'heure de la date actuelle et sera convertie en chaîne. avec le format suivant
yyyy-mm-dd hh:mm:ss(24h)

SELECT convert(varchar(25), getdate(), 120) 
133
John Woo

Il existe de nombreuses façons différentes de convert a datetime en chaîne. Voici un moyen:

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

Voir Démo

Voici un site Web contenant une liste de toutes les conversions:

Comment formater date/heure dans SQL Server

26
Taryn

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

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

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

Vous pouvez changer le nombre à la fin de l'instruction en un nombre qui changera le format des chaînes retournées. Une liste de ces codes est disponible sur le MSDN dans les sections CAST et CONVERT reference.

7
Jeremy1026

Il existe 3 méthodes différentes en fonction de ce que je souhaite et de la version que j'utilise.

Voici les méthodes ..

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 versions ultérieures)

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ère 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'
5
Todd.J.Hayden

En plus des fonctions CAST et CONVERT dans les réponses précédentes, si vous utilisez SQL Server 2012 et versions ultérieures, vous utilisez la fonction FORMAT pour convertir un type DATETIME en chaîne.

Pour reconvertir, utilisez les fonctions PARSE ou TRYPARSE ci-contre.

Les styles de mise en forme sont basés sur .NET (similaires aux options de mise en forme de chaîne de la méthode ToString ()) et présentent l’avantage d’être adaptés à 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
3
g2server

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

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

1
Antonio Papa

Beaucoup de personnes ont répondu à cela, mais j’ai le sentiment que la solution la plus simple a été laissée de côté.

SQL SERVER (je crois que 2012+) a des équivalents implicites sous forme de chaîne pour DATETIME2, comme indiqué ici

Consultez la section "Formats littéraux de chaîne pris en charge pour datetime2".

Pour répondre explicitement à la question des PO:

DECLARE @myVar NCHAR(32)
DECLARE @myDt DATETIME2
SELECT @myVar = @GETDATE()
SELECT @myDt = @myVar
PRINT(@myVar)
PRINT(@myDt)

sortie:

Jan 23 2019 12:24PM             
2019-01-23 12:24:00.0000000

Remarque: La première variable (myVar) contient également la valeur '2019-01-23 12:24:00.0000000'. Il est simplement formaté en Jan 23 2019 12:24PM en raison du formatage par défaut défini pour SQL SERVER qui est appelé lorsque vous utilisez PRINT. Ne soyez pas déconcerté par cela, la chaîne actuelle dans (myVer) = '2019-01-23 12:24:00.0000000'

1
Jamie Marshall

Essayez ci-dessous:

DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'

-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
0
Gaurav123
SELECT CONVERT(varchar, @datetime, 103) --for UK Date format 'DD/MM/YYYY'

101 - US - MM/JJ/AAAA

108 - Heure - HH: MI: SS

112 - Date - AAAAMMJJ

121 - ODBC - AAAA-MM-JJ HH: MI: SS.FFF

20 - ODBC - AAAA-MM-JJ HH: MI: SS

0