[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PostgreSQL: Проверка даты, число...
Fenix
не думал что увязну в такой мелочи, а где же функции IsNumeric, IsDate.

Как проверить поле на число на дату? т.е. аналог такой конструкции IsDate([MyField]) , IsNumeric([MyField])



Спустя 48 минут (14.08.2008 - 15:21) sergeiss написал(а):
Если честно, то я вопрос не понял.

Тип данных задается при создании таблицы, так что зачем в Постгре эти функции?

Если же у тебя символьное поле, то полученную величину ты можешь в PHP проверить на соответствие тому или иному типу. В нём соответствующие функции имеются.

Спустя 53 минуты, 14 секунд (14.08.2008 - 16:14) Fenix написал(а):
Цитата(sergeiss @ 14.8.2008, 12:21) [snapback]46166[/snapback]
Если честно, то я вопрос не понял.

Тип данных задается при создании таблицы, так что зачем в Постгре эти функции?

Если же у тебя символьное поле, то полученную величину ты можешь в PHP проверить на соответствие тому или иному типу. В нём соответствующие функции имеются.


Не нужно проверить переменную в хранимой процедуре (т.е. через PL/pgSQL а не PHP). Решил создать свои функции, проверку осушествлять через EXCEPTION при попытке дать неверные значения в функции to_number(), to_date()

Спустя 39 минут, 33 секунды (14.08.2008 - 16:54) sergeiss написал(а):
Если потенциально неверные значения может дать юзер, то почему бы не проверить это в PHP, до передачи на запись? Тут это сделать легко и просто.
Я на самом деле не понимаю, зачем такой алгоритм выбран smile.gif

А если не от юзера идут данные, то откуда?

Спустя 14 минут, 35 секунд (14.08.2008 - 17:08) Fenix написал(а):
Цитата(sergeiss @ 14.8.2008, 13:54) [snapback]46175[/snapback]
Если потенциально неверные значения может дать юзер, то почему бы не проверить это в PHP, до передачи на запись? Тут это сделать легко и просто.
Я на самом деле не понимаю, зачем такой алгоритм выбран smile.gif

А если не от юзера идут данные, то откуда?


загружаю данные из файлов вернее из файла MS Excel (там может быть все что угодно),
всю логику на корректность заполнения полей делаю в PostgreSQL, а точне в хранимой процедуре,
которая возвратит либо лог ошибок (всех), либо подтверждение об удачной загрузки.
Данных может быть очень много за раз, поэтому в PHP проверяю только наличия значения в поле.
Все делается исключительно: 1. для производительности (построчная проверка очень долгая) и 2. вся логика выполняется в БД (не построчно, работаем с временной таблицей SQL-ми запросами)
да и вообще считаю безопасным и удобным для разбора, поддержки самого кода.

Есть идеи?

Спустя 4 минуты, 14 секунд (14.08.2008 - 17:13) Fenix написал(а):
Цитата(sergeiss @ 14.8.2008, 13:54) [snapback]46175[/snapback]
Если потенциально неверные значения может дать юзер, то почему бы не проверить это в PHP, до передачи на запись? Тут это сделать легко и просто.
Я на самом деле не понимаю, зачем такой алгоритм выбран smile.gif

А если не от юзера идут данные, то откуда?


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

Спустя 11 минут, 19 секунд (14.08.2008 - 17:24) Fenix написал(а):
Цитата(Fenix @ 14.8.2008, 11:33) [snapback]46159[/snapback]
не думал что увязну в такой мелочи, а где же функции IsNumeric, IsDate.

Как проверить поле на число на дату? т.е. аналог такой конструкции IsDate([MyField]) , IsNumeric([MyField])


CREATE OR REPLACE FUNCTION applied."IsNumeric"(IN text_value text)
RETURNS boolean AS
$BODY$

declare number_value numeric;

declare result character varying;

begin
begin
number_value:= text_value::numeric+1;
return true;
exception
when OTHERS then
result:=SQLSTATE;

if result='22P02' then
return false;
else
return true;
end if;
end;
end;

$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.