web-dev-qa-db-fra.com

Comment convertir DateTime en VarChar

Je travaille sur une requête dans SQL Server 2005 où je dois convertir une valeur dans la variable DateTime en une variable varchar au format yyyy-mm-dd (sans partie temporelle). Comment je fais ça?

271
Ali

Avec Microsoft Sql Server:

--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'

--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
241
TonyOssa

Voici quelques tests SQL pour tous les styles.

DECLARE @now datetime
SET @now = GETDATE()
select convert(nvarchar(MAX), @now, 0) as output, 0 as style 
union select convert(nvarchar(MAX), @now, 1), 1
union select convert(nvarchar(MAX), @now, 2), 2
union select convert(nvarchar(MAX), @now, 3), 3
union select convert(nvarchar(MAX), @now, 4), 4
union select convert(nvarchar(MAX), @now, 5), 5
union select convert(nvarchar(MAX), @now, 6), 6
union select convert(nvarchar(MAX), @now, 7), 7
union select convert(nvarchar(MAX), @now, 8), 8
union select convert(nvarchar(MAX), @now, 9), 9
union select convert(nvarchar(MAX), @now, 10), 10
union select convert(nvarchar(MAX), @now, 11), 11
union select convert(nvarchar(MAX), @now, 12), 12
union select convert(nvarchar(MAX), @now, 13), 13
union select convert(nvarchar(MAX), @now, 14), 14
--15 to 19 not valid
union select convert(nvarchar(MAX), @now, 20), 20
union select convert(nvarchar(MAX), @now, 21), 21
union select convert(nvarchar(MAX), @now, 22), 22
union select convert(nvarchar(MAX), @now, 23), 23
union select convert(nvarchar(MAX), @now, 24), 24
union select convert(nvarchar(MAX), @now, 25), 25
--26 to 99 not valid
union select convert(nvarchar(MAX), @now, 100), 100
union select convert(nvarchar(MAX), @now, 101), 101
union select convert(nvarchar(MAX), @now, 102), 102
union select convert(nvarchar(MAX), @now, 103), 103
union select convert(nvarchar(MAX), @now, 104), 104
union select convert(nvarchar(MAX), @now, 105), 105
union select convert(nvarchar(MAX), @now, 106), 106
union select convert(nvarchar(MAX), @now, 107), 107
union select convert(nvarchar(MAX), @now, 108), 108
union select convert(nvarchar(MAX), @now, 109), 109
union select convert(nvarchar(MAX), @now, 110), 110
union select convert(nvarchar(MAX), @now, 111), 111
union select convert(nvarchar(MAX), @now, 112), 112
union select convert(nvarchar(MAX), @now, 113), 113
union select convert(nvarchar(MAX), @now, 114), 114
union select convert(nvarchar(MAX), @now, 120), 120
union select convert(nvarchar(MAX), @now, 121), 121
--122 to 125 not valid
union select convert(nvarchar(MAX), @now, 126), 126
union select convert(nvarchar(MAX), @now, 127), 127
--128, 129 not valid
union select convert(nvarchar(MAX), @now, 130), 130
union select convert(nvarchar(MAX), @now, 131), 131
--132 not valid
order BY style

Voici le résultat

output                   style
Apr 28 2014  9:31AM          0
04/28/14                     1
14.04.28                     2
28/04/14                     3
28.04.14                     4
28-04-14                     5
28 Apr 14                    6
Apr 28, 14                   7
09:31:28                     8
Apr 28 2014  9:31:28:580AM   9
04-28-14                     10
14/04/28                     11
140428                       12
28 Apr 2014 09:31:28:580     13
09:31:28:580                 14
2014-04-28 09:31:28          20
2014-04-28 09:31:28.580      21
04/28/14  9:31:28 AM         22
2014-04-28                   23
09:31:28                     24
2014-04-28 09:31:28.580      25
Apr 28 2014  9:31AM          100
04/28/2014                   101
2014.04.28                   102
28/04/2014                   103
28.04.2014                   104
28-04-2014                   105
28 Apr 2014                  106
Apr 28, 2014                 107
09:31:28                     108
Apr 28 2014  9:31:28:580AM   109
04-28-2014                   110
2014/04/28                   111
20140428                     112
28 Apr 2014 09:31:28:580     113
09:31:28:580                 114
2014-04-28 09:31:28          120
2014-04-28 09:31:28.580      121
2014-04-28T09:31:28.580      126
2014-04-28T09:31:28.580      127
28 جمادى الثانية 1435  9:31:28:580AM    130
28/06/1435  9:31:28:580AM    131

Faites nvarchar(max) plus court pour réduire le temps. Par exemple:

select convert(nvarchar(11), GETDATE(), 0)
union select convert(nvarchar(max), GETDATE(), 0)

les sorties:

May 18 2018
May 18 2018  9:57AM
338
Colin

Essayez ce qui suit:

CONVERT(varchar(10), [MyDateTimecolumn], 20)

Pour une date complète et pas seulement la date, faites: 

CONVERT(varchar(23), [MyDateTimecolumn], 121)

Voir cette page pour les styles de conversion:

http://msdn.Microsoft.com/en-us/library/ms187928.aspx
OU
Fonction SQL Server CONVERT ()

179
Joel Coehoorn

SQL Server 2012 a une nouvelle fonction, FORMAT: http://msdn.Microsoft.com/en-us/library/ee634924.aspx

et vous pouvez utiliser des chaînes de format de date et heure personnalisées: http://msdn.Microsoft.com/en-us/library/ee634398.aspx

Ces pages impliquent qu'il est également disponible sur SQL2008R2, mais je n'ai pas le moyen de vérifier si c'est le cas.

Exemple d'utilisation (date/heure australienne): 

FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
27
Zar Shardan

Cast ou Convert:

Syntaxe pour CAST:

CAST ( expression AS data_type [ (length ) ])

Syntaxe pour CONVERT:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

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

En fait, depuis que vous avez demandé un format spécifique:

REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
9

Vous pouvez utiliser DATEPART(DATEPART, VARIABLE). Par exemple:

DECLARE @DAY INT 
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @DATE DATETIME
@DATE = GETDATE()
SELECT @DAY = DATEPART(DAY,@DATE)
SELECT @MONTH = DATEPART(MONTH,@DATE)
SELECT @YEAR = DATEPART(YEAR,@DATE)
8
FCKOE

- Cela vous donne l'heure comme 0 dans le format 'aaaa-mm-jj 00: 00: 00.000'


SELECT CAST( CONVERT(VARCHAR, GETDATE(), 101) AS DATETIME) ; 
5
P's-SQL

Avec Microsoft SQL Server:

Utilisez la syntaxe pour CONVERTIR:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )

Exemple:

SELECT CONVERT(varchar,d.dateValue,1-9)

Pour le style, vous trouverez plus d’informations ici: MSDN - Transformer et convertir (Transact-SQL) .

4
dmunozpa

Essayer:

select replace(convert(varchar, getdate(), 111),'/','-');

Plus sur ms sql tips

2
Arek Bee

Essayez ce qui suit:

CONVERT(VARCHAR(10),GetDate(),102)

Ensuite, vous devrez remplacer le "." avec "-".

Voici un site qui aide http://www.mssqltips.com/tip.asp?tip=1145

2
Amy Patterson
declare @dt datetime

set @dt = getdate()

select convert(char(10),@dt,120) 

J'ai fixé la longueur de données de char(10) car vous voulez un format de chaîne spécifique.

2
Andy Jones

Voici comment je le fais: CONVERT(NVARCHAR(10), DATE1, 103) )

1
IvanSnek

Vous pouvez convertir votre date dans de nombreux formats, la syntaxe est simple à utiliser:

CONVERT('TheTypeYouWant', 'TheDateToConvert', 'TheCodeForFormating' * )
CONVERT(NVARCHAR(10), DATE_OF_DAY, 103) => 15/09/2016
  • Le code est un entier, ici 3 est la troisième mise en forme sans siècle, si vous voulez que le siècle change le code en 103.

Dans votre cas, je viens de convertir et restreindre la taille de nvarchar (10) comme ceci:

CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15

Voir plus sur: http://www.w3schools.com/sql/func_convert.asp

Une autre solution (si votre date est une date/heure) est un simple CAST:

CAST(MY_DATE_TIME as DATE) => 2016-09-15
1
Ema.H

Essayez ce SQL:

select REPLACE(CONVERT(VARCHAR(24),GETDATE(),103),'/','_') + '_'+ 
       REPLACE(CONVERT(VARCHAR(24),GETDATE(),114),':','_')
1
Dilkhush

Le PO mentionné datetime format. Pour moi, la partie du temps me gêne.
Je pense que c'est un peu plus propre de supprimer la partie heure (en convertissant datetime à date) avant le formatage.

convert( varchar(10), convert( date, @yourDate ) , 111 )
1
m42

Pour SQL Server 2008+ Vous pouvez utiliser simultanément CONVERT et FORMAT.

Par exemple, pour l'horodatage de style européen (par exemple, l'Allemagne):

CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
1
Peter Majko

Écrire une fonction

CREATE FUNCTION dbo.TO_SAP_DATETIME(@input datetime)
RETURNS VARCHAR(14)
AS BEGIN
    DECLARE @ret VARCHAR(14)
    SET @ret = COALESCE(SUBSTRING(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(26), @input, 25),'-',''),' ',''),':',''),1,14),'00000000000000');
    RETURN @ret
END
0
Beyhan
DECLARE @DateTime DATETIME
SET @DateTime = '2018-11-23 10:03:23'
SELECT CONVERT(VARCHAR(100),@DateTime,121 )
0
Dilkhush

Vous n'avez pas indiqué quelle base de données, mais avec mysql, voici un moyen facile d'obtenir une date à partir d'un horodatage (et la conversion de type varchar devrait se faire automatiquement):

mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16  | 
+-------------+
1 row in set (0.00 sec)
0
Allan Wind

Le moyen le plus court et le plus simple est:

DECLARE @now AS DATETIME = GETDATE()

SELECT CONVERT(VARCHAR, @now, 23)
0
Konstantin
CONVERT(VARCHAR, GETDATE(), 23)
0
Gabriel