Приведение целого числа к логическому в Informix - PullRequest
2 голосов
/ 16 сентября 2010

Мне нужно спроектировать мою схему в Informix так, чтобы запрос BOOLEAN с типом INTEGER работал.Например, SELECT id FROM mytable WHERE isavailable = ? работает, если я предоставляю логическое значение False или целое число 0.Я знаю, что мне нужно настроить схему с каким-то типом приведения, но я не знаю как.Причиной для этого является ошибка в другой части программного обеспечения, с которой я работаю, которую я не могу исправить: - (

1 Ответ

2 голосов
/ 17 сентября 2010

Function and Cast

create function expcast_int_to_bool(i integer) returning boolean;
    if   (i is null) then return null;
    elif (i != 0)    then return 't';
    else                  return 'f';
    end if;
end function;

create explicit cast (integer as boolean with expcast_int_to_bool);

Демонстрация

create table mytable
(
    id integer not null,
    isavailable boolean not null
);
insert into mytable values(1, 't');
insert into mytable values(2, 'f');

select id from mytable where isavailable = cast(0 as boolean);
select id from mytable where isavailable = cast(1 as boolean);
select id from mytable where isavailable = cast(-1 as boolean);
select id from mytable where isavailable = cast('t' as boolean);
select id from mytable where isavailable = cast('f' as boolean);

Эта демонстрация может быть запущена через DB-Access - и она правильно возвращает идентификатор 2 для первого и последнего оператора SELECT и идентификатор1 для остальных трех.Я официально не продемонстрировал, что он все еще работает, когда целочисленные или логические литералы заменяются на «?».Хотя есть хотя бы умеренный шанс, что это сработает.

...