web-dev-qa-db-fra.com

Générer un intervalle à partir d'une variable dans Presto

Dans Presto SQL, contrairement au SQL standard, les intervalles doivent être créés avec des virgules inversées:

INTERVAL '1' DAY

plutôt que

INTERVAL 1 DAY

J'essaie de générer un ensemble de dates comme décrit ici: https://stackoverflow.com/a/2157776/23889 , mais je rencontre un problème avec

INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY

Comment pourrait-on y parvenir? j'ai essayé

parse((a.a + (10 * b.a) + (100 * c.a)) as varchar)

mais cela n'a pas réussi.

16
Dimpl

Ce n'est pas une réponse directe à la question, mais si l'objectif est de reproduire les résultats décrits dans la question liée au dépassement de pile, générer des jours à partir de la plage de dates , voici une méthode alternative pour générer une séquence de dates dans Presto:

SELECT
    CAST(date_column AS DATE) date_column
FROM
    (VALUES
        (SEQUENCE(FROM_ISO8601_DATE('2010-01-20'), 
                  FROM_ISO8601_DATE('2010-01-24'), 
                  INTERVAL '1' DAY)
        )
    ) AS t1(date_array)
CROSS JOIN
    UNNEST(date_array) AS t2(date_column)
;

Production:

 date_column
-------------
 2010-01-20
 2010-01-21
 2010-01-22
 2010-01-23
 2010-01-24

Vous pouvez également utiliser d'autres valeurs INTERVAL en plus de DAY et différentes tailles de pas en plus de '1'.

* Adapté de ce commentaire de problème, https://github.com/prestodb/presto/issues/2169#issuecomment-68521569 .

19
wingr

J'ai fini par utiliser date_add:

date_add('day', -(a.a + (10 * b.a) + (100 * c.a)), date_trunc('day', now()))
7
Dimpl