web-dev-qa-db-fra.com

Le format de date Athena ne peut pas convertir la chaîne au format de date

essayé la syntaxe ci-dessous aucun d'eux n'a aidé à convertir une colonne de type chaîne à ce jour

select INVC_,APIDT,APDDT from APAPP100 limit 10
select current_date, APIDT,APDDT from APAPP100 limit 10
select date_format( b.APIDT, '%Y-%m-%d') from APAPP100 b
select CAST( b.APIDT AS date) from APAPP100 b
select date(b.APIDT) from APAPP100 b
select convert(datetime, b.APIDT) from APAPP100 b
select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b
select str_to_date(b.APIDT) from APAPP100 b
4

La requête correcte pour analyser une chaîne en une date serait date_parse.

Cela conduirait à la requête suivante:

select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b

documents prestodb: 6.10. Fonctions et opérateurs de date et d'heure

9
jens walter

Cela a fonctionné -

cast(from_iso8601_timestamp(createdat) as date)
6
Sagar Patil

La réponse de @jens walter est excellente si vous devez convertir une colonne contenant un seul format de date. J'ai eu des situations où il est utile d'avoir une colonne qui contient plusieurs formats de date différents et de pouvoir toujours la convertir.

La requête suivante prend en charge une colonne source qui contient des dates dans plusieurs formats différents.

SELECT b.APIDT, 
   Coalesce(
     try(date_parse(b.APIDT, '%Y-%m-%d %H:%i:%s')),
     try(date_parse(b.APIDT, '%Y/%m/%d %H:%i:%s')),
     try(date_parse(b.APIDT, '%d %M %Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%d/%m/%Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%d-%m-%Y %H:%i:%s')),
     try(date_parse(b.APIDT, '%Y-%m-%d')),
     try(date_parse(b.APIDT, '%Y/%m/%d')),
     try(date_parse(b.APIDT, '%d %M %Y'))
   ) 
FROM APAPP100 b

La fonction DATE_PARSE effectue la conversion de date.

La fonction TRY gère les erreurs en retournant NULL si elles se produisent.

La fonction COALESCE prend la première valeur non nulle.

Il y a un article plus approfondi ici (mon blog).

6
Alex Hague
SELECT   b.APIDT,
         b.Appppppppp,
         date_diff('day',current_date, date(b.APIDT)) AS Duedays
FROM xyz100 a
WHERE regexp_like(b.apidt, '[0-9]{4}-[0-9]{2}-[0-9]{2}')

WHERE NOT regexp_like(b.apidt, '[0-9]{4}-[0-9]{2}-[0-9]{2}') pour exclure la date indésirable

0