2
votes

Obtenir le nom du mois à partir de la valeur de date SQL Server dans la colonne de la table

Je veux créer une requête de statistiques (afficher le nombre d'enregistrements par mois).

Le problème est que je veux que le mois soit affiché sous forme de lettre comme janvier, février, mars, etc. pas comme 1, 2 ou 3. Je n'affiche pas le nom du mois dans l'alphabet en utilisant month(getdate().

Je ne sais pas comment puis-je faire la conversion. Voici ma requête SQL Server:

select count(*) [Total], month(date) [Mois] 
from user 
where year(date) >= 2018 
group by month(date) 
order by month(date) desc 


3 commentaires

Jetez un œil au fil de discussion - stackoverflow.com/questions/5650830/…


Je voudrais ajouter que, généralement, vous ne voulez même pas utiliser ces fonctions. Vous feriez mieux de sélectionner la date sous forme de date (heure) ou de mois sous forme d'entier ou autre, puis de laisser votre interface utilisateur se charger de la `` convertir '' en un nom de mois convivial. De cette façon, votre application / interface utilisateur peut prendre en charge la localisation plutôt que votre base de données, qui n'a pas le moindre indice sur les préférences de votre utilisateur ou les paramètres de localisation de l'application. Pour le dire autrement, pensez-y comme ceci: et si votre utilisateur préfère le chinois 二月 à février?


@Suraj Kumar: merci pour votre lien, c'est du travail, j'utilise juste le nom de date (mois, date)


3 Réponses :


2
votes

Vous devriez essayer quelque chose comme ceci

select convert(char(3), [date], 0)
select datename(month, [date])


1 commentaires

Et DATEPART par souci d'exhaustivité



2
votes

vous pouvez utiliser

SELECT FORMAT ([Date], 'MMMM') as date


1 commentaires

Cela pourrait être une réponse, mais FORMAT n'est pas disponible dans la version inférieure de SQL Server.



1
votes

J'imagine que la requête que vous souhaitez est:

select year(date), datename(month, date), count(*)  as total
from user 
where year(date) >= 2018 
group by year(date), datename(month, date)
order by min(date);

Remarques:

  • Vous devez inclure l'année dans votre requête. Votre suggère que la requête pourrait renvoyer plus d'un an.
  • N'incluez pas l'année si vous voulez vraiment combiner des mois de plusieurs années, mais je pense que c'est peu probable.
  • En général, vous voulez que les résultats soient classés par ordre chronologique. Une méthode pratique consiste à classer par valeur de date dans chaque groupe.


0 commentaires