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 !