Je travaille sur une requête dans Sql Server 2005 où j'ai besoin de convertir une valeur en DateTime
variable en une varchar
variable en yyyy-mm-dd
format (sans partie de temps). Comment je fais ça?
Je travaille sur une requête dans Sql Server 2005 où j'ai besoin de convertir une valeur en DateTime
variable en une varchar
variable en yyyy-mm-dd
format (sans partie de temps). Comment je fais ça?
Réponses:
Avec Microsoft Sql Server:
--
-- Create test case
--
DECLARE @myDateTime DATETIME
SET @myDateTime = '2008-05-03'
--
-- Convert string
--
SELECT LEFT(CONVERT(VARCHAR, @myDateTime, 120), 10)
LEFT(.., 10)
place de CONVERT(CHAR(10), ...)
? Ceux qui travaillent avec les versions de SQL Server plus récentes que 2005 (!) Devraient également vérifier la réponse de Zar Shardan suggérant une solution basée sur la FORMAT(date_value, format_string)
fonction.
FORMAT()
est trop lent par rapport àconvert(char(10),...)
Voici quelques sql de test 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
Faire nvarchar(max)
plus court pour couper 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
dd-mm
ou jun - 28
. Il y a une option ??
Essayez ce qui suit:
CONVERT(varchar(10), [MyDateTimecolumn], 20)
Pour une date complète et pas seulement une date, faites:
CONVERT(varchar(23), [MyDateTimecolumn], 121)
Voir cette page pour convertir les styles:
http://msdn.microsoft.com/en-us/library/ms187928.aspx
OU
Fonction CONVERT () de SQL Server
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 d'heure de date personnalisées: http://msdn.microsoft.com/en-us/library/ee634398.aspx
Ces pages impliquent qu'il est également disponible sur SQL2008R2, mais je n'en ai pas un à portée de main pour tester si c'est le cas.
Exemple d'utilisation (datetime australien):
FORMAT(VALUE,'dd/MM/yyyy h:mm:ss tt')
Soit 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, puisque vous avez demandé un format spécifique:
REPLACE(CONVERT(varchar(10), Date, 102), '.', '-')
Avec Microsoft SQL Server:
Utilisez la syntaxe pour CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Exemple:
SELECT CONVERT(varchar,d.dateValue,1-9)
Pour le style, vous pouvez trouver plus d'informations ici: MSDN - Cast and Convert (Transact-SQL) .
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
declare @dt datetime
set @dt = getdate()
select convert(char(10),@dt,120)
J'ai une longueur de données fixe de char(10)
comme vous voulez un format de chaîne spécifique.
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
Dans votre cas , je viens de convertir et de restreindre la taille de nvarchar (10) comme ceci:
CONVERT(NVARCHAR(10), MY_DATE_TIME, 120) => 2016-09-15
Voir plus à: http://www.w3schools.com/sql/func_convert.asp
Une autre solution (si votre date est un Datetime) est un simple CAST :
CAST(MY_DATE_TIME as DATE) => 2016-09-15
Pour SQL Server 2008+, vous pouvez utiliser CONVERT et FORMAT ensemble.
Par exemple, pour un horodatage de style européen (par exemple l'Allemagne):
CONVERT(VARCHAR, FORMAT(GETDATE(), 'dd.MM.yyyy HH:mm:ss', 'de-DE'))
Vous n'avez pas dit quelle base de données, mais avec mysql, voici un moyen facile d'obtenir une date à partir d'un horodatage (et la conversion du type varchar devrait se produire automatiquement):
mysql> select date(now());
+-------------+
| date(now()) |
+-------------+
| 2008-09-16 |
+-------------+
1 row in set (0.00 sec)
Le moyen le plus court et le plus simple est:
DECLARE @now AS DATETIME = GETDATE()
SELECT CONVERT(VARCHAR, @now, 23)
select REPLACE(CONVERT(VARCHAR, FORMAT(GETDATE(), N'dd/MM/yyyy hh:mm:ss tt')),'.', '/')
donnera 05/05/2020 10:41:05 AM
comme résultat
Vous ne dites pas quelle langue mais je suppose C#/.NET
car il a un DateTime
type de données natif . Dans ce cas, convertissez-le simplement à l'aide de la ToString
méthode et utilisez un spécificateur de format tel que:
DateTime d = DateTime.Today;
string result = d.ToString("yyyy-MM-dd");
Cependant, je vous déconseille de l'utiliser dans une requête de base de données ou concaténé dans une instruction SQL. Les bases de données nécessitent l'utilisation d'une chaîne de formatage spécifique. Il est préférable de mettre à zéro la partie temps et d'utiliser le DateTime comme paramètre SQL si c'est ce que vous essayez d'accomplir.
CONVERT
, voir la documentation MSDN .