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.)
La requête suivante obtiendra l'heure de la date actuelle et sera convertie en chaîne. avec le format suivantyyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar(25), getdate(), 120)
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.
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'
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
Vérifiez la syntaxe CAST et CONVERT de t-sql:
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'
Essayez ci-dessous:
DECLARE @myDateTime DATETIME
SET @myDateTime = '2013-02-02'
-- Convert to string now
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
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