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.
SELECT CONVERT(char(10), GetDate(),126)
Limiter la taille des côtelettes varchar de la partie heure que vous ne voulez pas.
À partir de SQL Server 2012 (la question d'origine concerne 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 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)
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")
Pour AAAAMMJJ essayer
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))
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
replace(convert(varchar, getdate(), 111), '/','-')
Fera aussi le tour sans "couper n'importe quoi".
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
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.
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))
SELECT CONVERT(NVARCHAR(20), GETDATE(), 23)
À partir de SQL Server 2008, vous pouvez procéder comme suit: CONVERT(date,getdate())
J'utiliserais:
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))
Vous pouvez également utiliser. C'est en utilisant le nouveau type de données DATE
name__. 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)
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;
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.
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 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