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