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)
3 Réponses :
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:
Vous pouvez l'adapter si votre valeur est un nombre plutôt qu'une chaîne.
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);
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
Pouvez-vous fournir un exemple d'entrée et de sortie attendue?