SQL - Comment utiliser GENERATE_DATE_ARRAY() ?

SQL - Comment utiliser GENERATE_DATE_ARRAY() ?

Date de sortie
September 17, 2024
Auteur
U
Untitled
“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 !