J'essaie d'obtenir le nombre de jours entre deux dates différentes, sauf les week-ends.
Je ne sais pas comment obtenir ce résultat.
postgresql
datetime
pragati basa
la source
la source
Réponses:
En supposant que par «week-end», vous voulez dire samedi et dimanche , cela peut être encore plus simple:
Vous n'avez pas besoin d'un niveau de sous-requête supplémentaire pour
generate_series()
. SRF (set return functions), également appelé "table-fonctions", peut être utilisé comme les tables de laFROM
clause.Notez en particulier qui
generate_series()
inclut la limite supérieure dans la sortie, tant qu'un intervalle complet (3e paramètre) convient. La limite supérieure n'est exclue que si le dernier intervalle est tronqué, ce qui n'est pas le cas pour les jours entiers.Avec le modèle
ISODOW
pour EXTRACT () , les dimanches sont signalés comme7
, selon la norme ISO. Permet uneWHERE
condition plus simple .Appelez plutôt
generate_series()
avectimestamp
entrée. Voici pourquoi:count(*)
est légèrement plus court et plus rapide quecount(the_day)
, faire la même chose dans ce cas.Pour exclure la limite inférieure et / ou supérieure, ajoutez / soustrayez 1 jour en conséquence. En règle générale, vous pouvez inclure la limite inférieure et exclure la limite supérieure:
la source
Cet exemple énumère toutes les dates entre le 2013-12-15 et le 2014-01-02 (inclusivement). La deuxième colonne donne le jour de la semaine (numériquement, entre 0 et 6). La troisième colonne indique si le jour de la semaine est un samedi / dimanche ou non (vous devrez adapter ce que vous considérez comme un week-end) et c'est ce qui pourrait être utilisé pour compter les jours de la semaine.
la source
En supposant qu'un week-end est le samedi et le dimanche, vous pouvez utiliser le SQL suivant.
Remplacez les dates par vos choix et le (0,6) par les jours de la semaine que vous souhaitez exclure.
Quelques points dont vous devez prendre note: -
Vous n'avez pas mentionné la version de PostgreSQL que vous utilisez. Cela fonctionne sur 9.1+ mais devrait fonctionner sur les versions inférieures.
Les dates choisies sont incluses lors de l'utilisation de generate_series. Donc, si vous voulez des jours entre les deux, ajoutez 1 jour à chaque date.
la source
Il y a deux ou trois choses que vous pouvez faire pour rendre cela plus facile. La méthode que j'utiliserais serait de s'assurer qu'un tableau de dates est disponible. Vous pouvez rapidement en créer un comme ceci:
Une fois le tableau créé, vous devriez pouvoir le remplir avec des données de date relativement rapidement.
Vous pouvez ensuite écrire votre requête sous la forme d'un décompte rapide des enregistrements de cette table.
la source
Je vous suggère de créer une fonction à utiliser à tout moment et d'écrire moins; )
Ce code ci-dessus créera une fonction sql qui compte et renvoie le nombre de jours de week-end (samedi, dimanche). Tout comme vous aurez plus de flexibilité pour utiliser cette fonction.
Après cela, vous pouvez utiliser la fonction pour renvoyer uniquement le nombre de jours de week-end dans un intervalle. Voici l'exemple à utiliser:
Cette sélection doit renvoyer quatre car le premier et le deuxième jour sont lundi et nous avons 2 samedis et 2 dimanches entre eux.
Maintenant, pour ne renvoyer que les jours ouvrables (sans week-end), comme vous le souhaitez , faites simplement une soustraction, comme dans l'exemple ci-dessous:
la source
la source