2015-12-14 2 views
0

Я пытаюсь проверить строковый массив на наличие преобразованного целочисленного числа. Это сидит внутри процедуры, где:Проверить на целое число в строковом массиве

nc_ecosite является integer переменная
current_consite является массив строк
ecosite является integer
current_ecosite_nc İŞ double

IF to_char(nc_ecosite, '999') IN 
    (select current_consite from current_site_record 
    where current_ecosite_nc::integer = nc_ecosite) THEN 
     ecosite := nc_ecosite; 

Результат всегда приходит от ELSIF что следует за первым IF. Это происходит, когда nc_ecosite находится в массиве (из проверок). Почему ecosite не заполняется nc_ecosite, когда значения совпадают?

Я работаю с Postgres 9.3 внутри pgAdmin.

+0

Любой шанс, что вы можете пос t больше функции, вместе с входами, ожидаемыми выходами и фактическими выходами? Я как бы следую за вами, но некоторые конкретные примеры помогут увидеть, чего вы хотите, и что происходит. – Hambone

ответ

0

Я нашел следующее, чтобы обеспечить желаемый результат:

IF nc_ecosite in 
(select (unnest(string_to_array(current_consite, ',')))::integer 
from current_site_record 
where current_ecosite_nc::integer = nc_ecosite) THEN 
    ecosite := nc_ecosite::integer; 
0

Непосредственная причина проблемы заключается в том, что to_char() вставляет ведущую заготовку для данного шаблона (унаследованные причины - создать пространство для потенциального отрицательного знака). Используйте FM Template Pattern Modifier, чтобы избежать этого:

to_char(nc_ecosite, 'FM999')

Конечно, было бы лучше, чтобы работать с соответствующими типами данных, чтобы начать с - если это вообще возможно.

Запрещая что, я полагаю, это быстрее и чище заявление:

SELECT INTO ecosite nc_ecosite -- variable or column?? 
    WHERE EXISTS (
     SELECT 1 FROM current_site_record c 
     WHERE current_ecosite_nc::integer = nc_ecosite 
     AND to_char(nc_ecosite, 'FM999') = ANY(current_consite) 
    ); 

    IF NOT FOUND THEN ... -- to replace your ELSIF 

Убедитесь, что вы не участвуете в конфликты имен между параметрами, переменными и именами столбцов! Широко распространенное соглашение состоит в том, чтобы добавлять имена переменных в _ (и никогда не использовать их для имен столбцов). Но в любом случае вам лучше назначить имена столбцов во всех запросах. Вы не указали, что такое столбец и который является переменной ...

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

Похожие: