Reputation: 951
tried the below syntax none of them helped to convert a string type column to date
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
Upvotes: 14
Views: 97611
Reputation: 1981
The answer by @jens walter is great if you need to convert a column with a single date format in it. I've had situations where it's useful to have a column that contains multiple different date formats and still be able to convert it.
The following query supports a source column that contains dates in multiple different formats.
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
The DATE_PARSE function performs the date conversion.
The TRY function handles errors by returning NULL if they do occur.
The COALESCE function takes the first non-null value.
There's a more in-depth write-up here (my blog).
Upvotes: 19
Reputation: 951
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}')
to exclude the junk date
Upvotes: 1
Reputation: 14029
The correct query for parsing a string into a date would be date_parse
.
This would lead to the following query:
select date_parse(b.APIDT, '%Y-%m-%d') from APAPP100 b
prestodb docs: 6.10. Date and Time Functions and Operators
Upvotes: 23