Comment obtenir une date au format AAAA-MM-JJ à partir d'un champ DateTime TSQL?

Comment récupérer une date de SQL Server au format AAAA-MM-JJ? J'ai besoin de cela pour travailler avec SQL Server 2000 et plus. Existe-t-il un moyen simple d'effectuer cela dans SQL Server ou serait-il plus facile de le convertir par programme après avoir récupéré le jeu de résultats?

J'ai lu le CAST et CONVERT sur Microsoft Technet, mais le format que je veux n'est pas répertorié et changer le format de date n'est pas une option.

224
demandé sur Kinze 2009-05-20 23:00:41

20 réponses

SELECT CONVERT(char(10), GetDate(),126)

Limiter la taille des côtelettes varchar de la portion d'heure que vous ne voulez pas.

361
répondu Darrel Miller 2009-05-20 19:12:43

Commençant par SQL Server 2012 (la question originale est pour 2000):

SELECT FORMAT(GetDate(), 'yyyy-MM-dd')

85
répondu Ignas Vyšnia 2015-12-21 09:53:22
SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy – 10/02/2008                  

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd – 2008.10.02           

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM)

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd

SELECT convert(varchar, getdate(), 112) -- yyyymmdd

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h)

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)

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

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
72
répondu Imran 2016-09-08 15:08:27

Le formulaire que vous recherchez est répertorié dans la documentation en ligne de books.

Http://msdn.microsoft.com/en-us/library/aa226054 (SQL.80).aspx

Par exemple, essayez ce qui suit:

select convert(varchar,getDate(),120)
select convert(varchar(10),getDate(),120)
34
répondu John Sansom 2009-05-20 19:08:38

La fonction convert avec le spécificateur de format 120 vous donnera le format "AAAA-MM-JJ HH: mm: ss", il vous suffit donc de limiter la longueur à 10 pour obtenir uniquement la partie date:

convert(varchar(10), theDate, 120)

Cependant, le formatage des dates est généralement préférable dans la couche de présentation plutôt que dans la couche de base de données ou de gestion. Si vous renvoyez la date formatée à partir de la base de données, le code client doit l'analyser à nouveau à une date s'il doit effectuer des calculs à ce sujet.

Exemple dans C#:

theDate.ToString("yyyy-MM-dd")
25
répondu Guffa 2014-05-10 22:02:51

Pour AAAAMMJJ essayez

select convert(varchar,getDate(),112)

J'ai seulement testé sur SQLServer2008.

14
répondu LosManos 2014-01-26 14:38:36

Une autre façon...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
6
répondu Athadu 2012-08-03 16:52:42
replace(convert(varchar, getdate(), 111), '/','-')

Fera aussi trick sans "couper quoi que ce soit".

6
répondu Rafael Emshoff 2012-10-29 09:26:44

Au cas où quelqu'un voudrait le faire dans l'autre sens et trouve ceci.

select convert(datetime, '12.09.2014', 104)

Convertit une chaîne au format de date allemand en objet datetime.

Pourquoi 104? Voir ici: http://msdn.microsoft.com/en-us/library/ms187928.aspx

6
répondu Jenny O'Reilly 2013-12-05 13:33:13

Pour ceux qui voudraient aussi la partie temps (je l'ai fait), l'extrait suivant peut aider

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h)
SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm
SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm
                              --example -- 2008-10-02T10:52:47.513
6
répondu user2431693 2016-09-15 12:14:39

Dans votre lien cast et convert, utilisez le style 126 ainsi:

CONVERT (varchar(10), DTvalue, 126)

Cela tronque le temps. Votre exigence de l'avoir en AAAA-mm-JJ signifie qu'il doit s'agir d'un type de données de chaîne et d'un datetime.

Franchement, je le ferais sur le client sauf si vous avez de bonnes raisons de ne pas le faire.

4
répondu gbn 2009-05-20 19:06:43

Si vous voulez l'utiliser comme une date au lieu d'un varchar à nouveau après, n'oubliez pas de le convertir en arrière:

select convert(datetime,CONVERT(char(10), GetDate(),126))
3
répondu Wayne Evans 2011-10-13 19:35:51

SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)

2
répondu Dmitri Kouminov 2012-08-30 06:02:15

Je voudrais utiliser:

CONVERT(char(10),GETDATE(),126)
1
répondu KM. 2009-05-20 19:10:00
SELECT Code,Description FROM TABLE

-- This will Include only date part of 14th March 2010. Any date with date companents will not be considered.
WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate <= DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))

-- This will Include the whole day of 14th March 2010
--WHERE ID= 1 AND FromDate >= CONVERT(DATETIME, '2010-02-14', 126) AND ToDate < DATEADD(dd, 1, CONVERT(DATETIME, '2010-03-14', 126))
1
répondu arun.passioniway 2012-03-20 09:26:42

À partir de SQL Server 2008, vous pouvez faire ceci: CONVERT(date,getdate())

1
répondu Asher 2018-07-03 20:38:32

L'utilisation d'une instruction CASE pour chacune des fonctions convert / cast fonctionne toujours pour moi:

Veuillez remplacer tableXXXXY par votre nom de table, et issueDate_dat par le nom de votre champ datetime dans cette table:

SELECT  issueDate_dat, CONVERT(varchar, DATEPART(yyyy, issuedate_dat))  AS issueDateYYYY
, CASE WHEN (len(CONVERT(varchar, DATEPART(mm, issuedate_dat))) < 2) THEN '0' +CONVERT(varchar, DATEPART(mm, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(mm, issuedate_dat)) END AS  issueDateMM
, CASE WHEN (len(CONVERT(varchar, DATEPART(dd, issuedate_dat))) <2) THEN '0' +CONVERT(varchar, DATEPART(dd, issuedate_dat)) ELSE CONVERT(varchar, DATEPART(dd, issuedate_dat)) END AS issueDateDD
FROM            tableXXXXY

J'espère que cela a été utile. chagbert.

0
répondu Chagbert 2016-09-08 15:41:28

Cette solution fonctionne pour moi, simple et efficace (avec 126 aussi)

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
0
répondu anfehernandez94 2017-02-22 21:35:48

Si votre format de date source est tout foiré, essayez quelque chose du genre:

select
convert(nvarchar(50),year(a.messedupDate))+'-'+
(case when len(convert(nvarchar(50),month(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),month(a.messedupDate))+'-' 
    else convert(nvarchar(50),month(a.messedupDate)) end)+
(case when len(convert(nvarchar(50),day(a.messedupDate)))=1 
    then '0'+ convert(nvarchar(50),day(a.messedupDate))+'-'
    else convert(nvarchar(50),day(a.messedupDate)) end) 
from messytable a
0
répondu CArnold 2017-02-24 13:42:19
 IFormatProvider culture = new System.Globalization.CultureInfo("fr-FR", true);

cmdGetPaymentStatement.Parameters.AddWithValue("@pStartDate", DateTime.Parse("22/12/2017", culture, System.Globalization.DateTimeStyles.AssumeLocal)).IsNullable = true;
0
répondu Raj Kumar 2017-08-28 10:14:32