Распознавание неверных дат в postgresql - PullRequest
2 голосов
/ 18 июля 2011

Я пытаюсь разобрать грязный ввод в таблицы postgres.У меня проблема с полем «Дата», иногда содержащим не даты, например «00000000» или «20100100».pg отказывается принять это, и это правильно.

Есть ли способ заставить postgres распознавать недопустимые даты (или только действительные даты, если это работает лучше), чтобы я мог заменить разумное значение по умолчанию?

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

Приветствия,

Юрген

Ответы [ 2 ]

7 голосов
/ 18 июля 2011

http://www.tek -tips.com / viewthread.cfm? Qid = 1280050 & page = 9

Более общий подход, чем приведенный выше:

create function safe_cast(text,anyelement) 
returns anyelement 
language plpgsql as $$ 
begin 
    $0 := $1; 
    return $0; 
    exception when others then 
        return $2; 
end; $$;

Использованокак это:

select safe_cast('Jan 10, 2009', '2011-01-01'::timestamp)
select safe_cast('Jan 10, 2009', null::timestamp)

Зачислено дружественным парням на канале #postgresql irc.:)

0 голосов
/ 18 июля 2011

Вы можете написать функцию pgsql с блоком обработки исключений .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...