2015-06-12 3 views
0

Я застрял в проблеме форматирования даты и надеюсь, что кто-то может мне помочь!Postgres SQL - выберите непоследовательные форматы даты из поля символов

Наша БД имеет поле даты, которое было отформатировано в качестве символьного поля нашей командой разработчиков из-за разных источников/форматов импорта.

Я идеально нацелен на создание представления, которое заканчивается датой, которую я буду использовать в инструменте отчетности (dbxtra) для ежедневной/ежемесячной группировки по сводам и отчетам.

Пример данных:

"2015-05-30"

"3/06/2015 12:00 AM"

Я попытался:

  • преобразования в date with: date

  • substr принять первые 10 символов

Любые предложения?

+0

Я также пробовал: обрезать (оба '' из substr (comp_date, 1,10)) как comp_date2, который теперь дает мне часть даты только без пробелов .... хотя все равно ничего хорошего – Damo

+0

Используйте 'to_timestamp'. Поскольку форматы варьируются в пределах столбца, вам, вероятно, понадобится оператор 'CASE', который ищет разные форматы. Это будет медленным и уродливым. Я предлагаю решительно ударить вашу команду программистов над головой. –

+0

И как только вы очистили беспорядок, измените столбец на «timestamp» –

ответ

0

Я бы написал хранимую процедуру для этого, которую вы можете вызвать в своем sql-запросе. Что-то вроде этого (псевдокод):

CREATE OR REPLACE FUNCTION convertMessedUpStringsToDate(i_val1 varchar) RETURNS timestamp 
declare 
    retval timestamp; 
    formatArray varchar[]; 
begin 
    -- build array with possible formats, most used in front 
    formatArray[0] = 'YYYY-MM-DD'; 
    formatArray[1] = 'DD/MM/YYYY HH12:MI AM'; 

    for i in 0 .. formatArray.count loop 
    begin 
     retval = to_timestamp(i_val, formatArray[i]); 
    exception 
     -- catch any exception and try the next format 
    end; 
    end loop; 

    return retval; 
end; 

Другой вариант для разбора ввод с помощью регулярных выражений и найти сопоставление с образцом таким образом. Во всяком случае, я надеюсь, что у вас не слишком много разных моделей.

Смежные вопросы