2017-01-06 5 views
0

меня ниже даты в моем улье таблице:как проверить и сопоставить различные форматы даты в улье

Jan 2014 
Oct-13 
8-Nov 
8-Oct 
30-Nov-11 

Мне нужно, чтобы преобразовать их в формате «YYYY-MM-DD». Я использовал from_unixtime(unix_timestamp(change_log_date ,'yyyyMMdd'), 'yyyy-MM-dd') для скрытого формата даты, который отлично работает 30 ноября 11, однако, поскольку у меня есть разные форматы дат в данных, так как писать общий код, который будет проверять формат даты и преобразовывать его в «yyyy-MM-dd ». Мне нужно поставить 0 за день/месяц/год, если его нет.

for eg. I need to convert 8-Oct into '0000-10-08' 

нужна помощь

+0

Возможный дубликат [Преобразование строки даты в формате «MM/DD/YY»] (http://stackoverflow.com/questions/39634829/convert-date-string-in-mm-dd-yy-format) – cheseaux

ответ

0

Если вы знаете все возможные формат даты, вы можете использовать случай заявление, чтобы применить правильный формат для каждой строки:

CASE WHEN change_log_date rlike '[0-9]{2}-[a-zA-Z]{3}-[0-9]{2}' 
    THEN from_unixtime(unix_timestamp(change_log_date ,'yyyyMMdd'), 'yyyy-MM-dd') 
    WHEN change_log_date rlike --other regex 
    THEN -- and so on 

Если вы больше знакомы с Java или python, вы можете легко написать свой фрагмент кода и использовать его как Hive function.