1
votes

Extrait de la date de la semaine ISO (201905) BigQuery

J'ai besoin d'extraire la date du dimanche de son numéro de semaine ISO: c'est-à-dire 201905 Il doit être dans #standardSQL car il sera programmé avec des scripts qui ne prennent pas en charge l'héritage.

J'ai essayé d'ajuster la formule de travail de Google Sheets, mais je ne peux pas le comprendre. La formule originale de Google Sheets:

TO_TEXT (
(DATE(LEFT(Week_ISO,4),1,1)
- (WEEKDAY(DATE(LEFT(Week_ISO,4),1,1))-2)
+ (RIGHT(Week_ISO,2)-1)*7) 
+6)


1 commentaires

Pouvez-vous fournir un exemple d'entrée et de sortie attendue?


3 Réponses :


3
votes

D'après ma lecture de la documentation, cela devrait fonctionner:

SELECT DATE_ADD(DATE_TRUNC(PARSE_DATE('%Y%m%d', CONCAT(substr(isoyyyyww, 1, 4), '0601')),
                           isoyear
                          ),
                INTERVAL CAST(substr(isoyyyyww, -2) as int64) WEEK
               )
FROM (SELECT '200506' as isoyyyyww);

Mais ce n'est pas le cas.

Voici donc une alternative:

XXX

L'idée ici est la suivante:

  • Convertissez votre format yyyyww en une date au milieu de l'année.
  • Tronque la date au début de l'année ISO.
  • Rajoutez le nombre de semaines approprié.

Vous pouvez l'adapter si votre valeur est un nombre plutôt qu'une chaîne.


0 commentaires

0
votes

Il semble que votre proposition ne soit pas tout à fait juste. Par exemple, cela ne fonctionne pas pour la semaine 200101. Avec votre formule, la réponse est le 08/01/2001.

Voici ma suggestion:

SELECT  DATE_ADD(DATE_TRUNC(PARSE_DATE('%Y%m%d', CONCAT(substr(isoyyyyww, 1, 4), '0104')),isoyear), INTERVAL CAST(substr(isoyyyyww, -2) as int64)-1 WEEK)
FROM (SELECT '200506' as isoyyyyww);


0 commentaires

1
votes

L'autre option pour moi était de ne pas passer à ISOWEEK. La semaine iso perd de toute façon les informations sur l'année. Au lieu de cela, j'ai simplement reporté toutes les dates au premier jour de l'ISOWEEK.

DATE_ADD(
  LAST_DAY(DATETIME(date), ISOWEEK), 
  INTERVAL 
  -6 
  DAY) as login_week


0 commentaires