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)
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:
Essayez ci-dessous:
DECLARE @myDateTime DATETIME SET @myDateTime = '2013-02-02' -- Convert to ssortingng now SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)