web-dev-qa-db-fra.com

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

Comment extraire une date de SQL Server au format YYYY-MM-DD? J'ai besoin de cela pour travailler avec SQL Server 2000 et plus. Existe-t-il un moyen simple d'exécuter 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 and CONVERT sur Microsoft Technet, mais le format que je veux ne figure pas dans la liste et la modification du format de la date n'est pas une option.

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

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

390
Darrel Miller

À partir de SQL Server 2012 (la question d'origine concerne 2000):

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

96
Ignas Vyšnia
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
93
Imran

Le formulaire que vous recherchez est répertorié dans la documentation en ligne des livres.

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)
35
John Sansom

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)

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

Exemple en C #:

theDate.ToString("yyyy-MM-dd")
26
Guffa

Pour AAAAMMJJ essayer

select convert(varchar,getDate(),112)

J'ai seulement testé sur SQLServer2008.

14
LosManos

Une autre façon ...

CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime)) 
6
Athadu

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
user2431693
replace(convert(varchar, getdate(), 111), '/','-')

Fera aussi le tour sans "couper n'importe quoi".

6
Rafael Emshoff

Au cas où quelqu'un voudrait le faire autrement et le trouvera.

select convert(datetime, '12.09.2014', 104)

Ceci convertit une chaîne au format de date allemand en un objet datetime.

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

6
Jenny O'Reilly

Dans votre lien de conversion et de conversion, utilisez le style 126 ainsi:

CONVERT (varchar(10), DTvalue, 126)

Cela tronque l'heure. Votre exigence de l'afficher en aaaa-mm-jj signifie qu'il doit s'agir d'un type de données chaîne et d'une date/heure.

Franchement, je le ferais sur le client à moins que vous n'ayez de bonnes raisons de ne pas le faire.

5
gbn

Si vous souhaitez l’utiliser ultérieurement comme date, au lieu d’un varchar, n'oubliez pas de le reconvertir:

select convert(datetime,CONVERT(char(10), GetDate(),126))
4
Wayne Evans

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

2
Dmitri Kouminov

À partir de SQL Server 2008, vous pouvez procéder comme suit: CONVERT(date,getdate())

1
Asher

J'utiliserais:

CONVERT(char(10),GETDATE(),126)
1
KM.
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
arun.passioniway

Vous pouvez également utiliser. C'est en utilisant le nouveau type de données DATEname__. Peut ne pas fonctionner dans toutes les versions précédentes, mais grandement simplifié dans les versions ultérieures.

SELECT CAST(getdate() AS DATE)
SELECT LEFT(CAST(getdate() AS DATE), 7)
1
Sams
 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
Raj Kumar

Utiliser 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 date/heure 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 c'était utile. Chagbert.

0
Chagbert

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

CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
0
anfehernandez94

Si votre format de date source est tout bousillé, essayez quelque chose comme:

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
CArnold