89 votes

Obtenir le mois et l'année à partir d'une date dans SQL Server 2005

J'ai besoin du mois et de l'année de la date dans le serveur SQL, comme 'Jan 2008'. Je regroupe la requête par mois et année. J'ai cherché et trouvé des fonctions comme datepart, convert, etc., mais aucune d'entre elles ne semble utile pour cela. Est-ce que quelque chose m'échappe ? Existe-t-il une fonction pour cela ?

0 votes

@Evan Carroll - Est-ce que cela constitue un détournement de la question ? Si vous avez une réponse supérieure à la question, ne devriez-vous pas la fournir en tant que réponse à la question au lieu de diriger les gens vers une autre question ?

0 votes

@STLDeveloper comment est-ce un détournement. La question porte sur l'année 2005 ? Je n'ai pas mis ça là. Je ne cherche pas 2005.. Malheureusement, la meilleure réponse ici ne fonctionne pas sur 2005, c'est 2012-explicite. Dois-je rétrograder les réponses de 2005 pour être archaïque ?

0 votes

@STLDeveloper en fait, je ne m'en soucie pas ici. =) ma position officielle a toujours été de conseiller aux gens d'utiliser PostgreSQL, je ne sais pas trop pourquoi j'essaie d'aider.

173voto

HS. Points 5414
select 
datepart(month,getdate()) -- integer (1,2,3...)
,datepart(year,getdate()) -- integer
,datename(month,getdate()) -- string ('September',...)

0 votes

Donc, je pense que c'est ce que je veux, mais je ne vois pas comment TSQL comprendrait la différence entre datepart(month,getdate()) y datepart(year,getdate()) . Quels sont les mois y année ?

4 votes

@jp2code mois y année sont essentiellement des constantes définies ici : msdn.microsoft.com/fr/us/library/ms174420.aspx . TSQL les comprend de la même manière que vous, en les lisant :)

1 votes

LOL - Merci Zach. Je l'ai longtemps regardé avant de le découvrir sur un autre site.

76voto

robsoft Points 3707

Si tu veux dire que tu veux les récupérer sous forme de chaîne, dans ce format ;

SELECT 
  CONVERT(CHAR(4), date_of_birth, 100) + CONVERT(CHAR(4), date_of_birth, 120) 
FROM customers

Voici les autres options de format

0 votes

J'ai essayé d'utiliser CONVERT(CHAR(4), GetDate(), 100) sur mon serveur SQL et j'ai obtenu "09 1" à la place. J'ai obtenu l'espace et un "1" pour le 17. En utilisant "select CONVERT(varchar, GetDate(), 100)", j'ai obtenu "09 17 2009 4:59PM".

1 votes

C'est bizarre - d'après les documents que j'ai cités, 100 devrait renvoyer une abréviation du mois en trois lettres et un espace, s'il est placé dans un CHAR(4). Mais le résultat que vous avez affiché pour un CONVERT(varchar, getdate(), 100) est différent de ce que je m'attendais à voir. Quelle version de SQLServer utilisez-vous ? Quels sont les paramètres de localisation/internationalisation que vous utilisez (même si cela ne devrait pas avoir d'importance pour un format 100).

57voto

CrimsonKing Points 1363

À partir de SQL Server 2012, vous pouvez utiliser :

SELECT FORMAT(@date, 'yyyyMM')

12voto

don Points 101

Utilisez :

select datepart(mm,getdate())  --to get month value
select datename(mm,getdate())  --to get name of month

11voto

Mike Geise Points 590

C'est drôle, je m'amusais justement à écrire cette même requête dans SQL Server puis dans LINQ.

SELECT 
    DATENAME(mm, article.Created) AS Month, 
    DATENAME(yyyy, article.Created) AS Year, 
    COUNT(*) AS Total 
FROM Articles AS article 
GROUP BY 
    DATENAME(mm, article.Created), 
    DATENAME(yyyy, article.Created) 
ORDER BY Month, Year DESC

Il produit le résultat suivant (exemple).

Month | Year | Total

January | 2009 | 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X