SQL - Comment utiliser GENERATE_DATE_ARRAY() ?

SQL - Comment utiliser GENERATE_DATE_ARRAY() ?

Date de sortie
September 17, 2024
Auteur
Bertrand Fabre
“Je dois générer toutes les dates sur 37 jours pour une requête complexe. Je ne vois pas comment faire simplement sur BigQuery 🧐.

Et bien, tu tapes dans le mille car il existe une fonction sur BigQuery qui permet de faire exactement cela !

Cette fonction s’appelle GENERATE_DATE_ARRAY() !

La syntaxe

GENERATE_DATE_ARRAY(date_de_début, date_de_fin, INTERVAL un_integer_pour_incrementer_la_date la_granularité_de_linterval)
  • date_de_début : on précise donc la début à partir de laquelle on souhaite faire démarrer l’interval ;
  • date_de_fin : on doit lui préciser une date de fin pour qu’il s’arrête 😅 ;
  • un_integer_pour_incrementer_la_date : un nombre entier pour indiquer si on veut incrémenter de un jour en un jour ou de cinq mois en cinq mois, etc ;
  • la_granularité_de_linterval : on précise sur l’incrément est en DAY, MONTH, YEAR, etc.

La démo

SELECT GENERATE_DATE_ARRAY('2024-09-01', '2024-09-13', INTERVAL 1 DAY) AS rangeDate;

Le résultat :

Ligne
rangeDate
1
2024-09-01
2024-09-02
2024-09-03
2024-09-04
2024-09-05
2024-09-06
2024-09-07
2024-09-08
2024-09-09
2024-09-10
2024-09-11
2024-09-12
2024-09-13

Sympa, non ? Quoi ? C’est un tableau ? Ah bah ouai…

Bon, petit touche perso, avec un UNNEST(). J’ai tenté de faire propre.

WITH cte_rangeDate AS (
  SELECT GENERATE_DATE_ARRAY('2024-09-01', '2024-09-13', INTERVAL 1 DAY) AS rangeDate
)
SELECT day
FROM cte_rangeDate, UNNEST(rangeDate) AS day
;

Le résultat :

Ligne
day
1
2024-09-01
2
2024-09-02
3
2024-09-03
4
2024-09-04
5
2024-09-05
6
2024-09-06
7
2024-09-07
8
2024-09-08
9
2024-09-09
10
2024-09-10
11
2024-09-11
12
2024-09-12
13
2024-09-13

Merci de votre lecture !