J'ai besoin de déterminer le nombre de jours dans un mois pour une date donnée dans SQL Server.
Existe-t-il une fonction intégrée? Sinon, que dois-je utiliser comme fonction définie par l'utilisateur?
sql
sql-server
datetime
date
user-defined-functions
Même Mien
la source
la source
case when datediff(m, dateadd(day, 1-day(@date), @date), convert(date, convert(datetime, 2958463))) > 0 then datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date))) else 31 end
day
composant de laeomonth
sortie.Dans SQL Server 2012, vous pouvez utiliser EOMONTH (Transact-SQL) pour obtenir le dernier jour du mois, puis vous pouvez utiliser DAY (Transact-SQL) pour obtenir le nombre de jours du mois.
la source
Solution la plus élégante: fonctionne pour n'importe quel @DATE
Jetez-le dans une fonction ou utilisez-le simplement en ligne. Cela répond à la question d'origine sans tous les indésirables supplémentaires dans les autres réponses.
exemples de dates d'autres réponses:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
Renvoie 31SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
Renvoie 29SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
Renvoie 31la source
Beaucoup plus simple ... essayez
day(eomonth(@Date))
la source
Personnellement, je créerais un UDF pour cela s'il n'y avait pas de fonction intégrée ...
la source
Je voudrais suggerer:
la source
Ce code vous donne le nombre de jours du mois en cours:
Modifiez
getdate()
la date pour laquelle vous devez compter les jours.la source
la source
Solution 1: trouvez le nombre de jours dans le mois où nous sommes actuellement
Solution 2: trouver le nombre de jours dans une combinaison mois-année donnée
la source
Vous devez ajouter une fonction, mais c'est simple. J'utilise ceci:
la source
la source
Nice Simple et ne nécessite pas de création de fonctions Fonctionne bien
la source
Vous devez créer une fonction, mais c'est pour votre propre convenance. Cela fonctionne parfaitement et je n'ai jamais rencontré de calculs défectueux en utilisant cette fonction.
Comment cela fonctionne: en soustrayant le numéro du jour de la date de la date elle-même, vous obtenez le dernier jour du mois précédent. Donc, vous devez ajouter un mois à la date donnée, soustraire le numéro du jour et obtenir la composante jour du résultat.
la source
la source
J'ai voté pour Mehrdad, mais cela fonctionne aussi. :)
Tester
la source
En voici un autre...
la source
Je sais que cette question est ancienne mais je pensais partager ce que j'utilise.
et
Ceux-ci peuvent être combinés pour créer une seule fonction permettant de récupérer le nombre de jours dans un mois si nécessaire.
la source
Nice 'n' Simple et ne nécessite pas de création de fonctions
la source
subdate
fonction.La réponse de Mehrdad Afshari est la plus précise, sauf d'habitude, cette réponse est basée sur une approche mathématique formelle donnée par Curtis McEnroe dans son blog https://cmcenroe.me/2014/12/05/days-in-month-formula.html
la source
Pour obtenir le non. de jours dans un mois, nous pouvons directement utiliser Day () disponible en SQL.
Suivez le lien posté à la fin de ma réponse pour SQL Server 2005/2008.
L'exemple suivant et le résultat proviennent de SQL 2012
Résultat dans SQL Server SSMS
Processus:
Lorsque EOMONTH est utilisé, quel que soit le format de date que nous utilisons, il est converti au format DateTime du serveur SQL. Ensuite, la sortie de date de EOMONTH () sera 2016-12-31 ayant 2016 comme année, 12 comme mois et 31 comme jours. Cette sortie, une fois passée dans Day (), vous donne le nombre total de jours dans le mois.
Si nous voulons obtenir le résultat instantané pour vérification, nous pouvons directement exécuter le code ci-dessous,
ou
pour référence au travail dans SQL Server 2005/2008/2012, veuillez suivre le lien externe suivant ...
Rechercher le nombre de jours dans un mois dans SQL
la source
résultat: Ce mois 31
Le mois prochain 30
la source
la source
la source
Pour n'importe quelle date
la source
la source
requête simple dans SQLServer2012:
sélectionner le jour (('20-05-1951 22:00:00'))
j'ai testé pour de nombreuses dates et il renvoie toujours un résultat correct
la source
sélectionnez first_day = dateadd (dd, -1 * datepart (dd, getdate ()) + 1, getdate ()), last_day = dateadd (dd, -1 * datepart (dd, dateadd (mm, 1, getdate ())) , dateadd (mm, 1, getdate ())), no_of_days = 1 + dateiff (jj, dateadd (jj, -1 * datepart (jj, getdate ()) + 1, getdate ()), dateadd (jj, -1 * datepart (jj, dateadd (mm, 1, getdate ())), dateadd (mm, 1, getdate ())))
remplacez n'importe quelle date par getdate pour obtenir le nombre de mois de cette date particulière
la source
la source