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.
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.
Commençant par SQL Server 2012 (la question originale est pour 2000):
SELECT FORMAT(GetDate(), 'yyyy-MM-dd')
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
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)
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")
Pour AAAAMMJJ essayez
select convert(varchar,getDate(),112)
J'ai seulement testé sur SQLServer2008.
Une autre façon...
CONVERT(varchar, DATEPART(yyyy, @datetime)) + '/' + CONVERT(varchar, DATEPART(mm, @datetime)) + '/' + CONVERT(varchar, DATEPART(dd, @datetime))
replace(convert(varchar, getdate(), 111), '/','-')
Fera aussi trick sans "couper quoi que ce soit".
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
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
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.
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))
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))
À partir de SQL Server 2008, vous pouvez faire ceci: CONVERT(date,getdate())
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.
Cette solution fonctionne pour moi, simple et efficace (avec 126 aussi)
CONVERT(NVARCHAR(MAX), CAST(GETDATE() as date), 120)
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
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;