Я знаю, что мог бы сделать следующее с внутренним объединением и выбором с таблицей соответствия, но скорее бы имел функцию.
Допустим, у меня есть запрос, например select * from foobar where is_valid in ('yes', 'no')
. К сожалению, foobar.is_valid является целым числом, только 0 или 1.
Я хотел бы создать функцию, которая отображает varchar на целые числа, что-то вроде select * from foobar where is_valid in fn_yesno_to_int('yes', 'no')
. Это вообще возможно?
Я не могу изменить предложение in
на что-то другое, и я не могу вызывать функцию для каждого значения в предложении in
(нет in (func('yes'), func('no'))
).
Моим последним средством было бы создать таблицу соответствия, такую как {{0, 'нет'}, {1, 'да'}}, и использовать ее, чтобы отказаться от использования функции. Другой, возможно, лучший вариант - перевернуть проблему и вызвать функцию на foobar.is_valid
, сопоставляя 0,1 с нет, да; но мне очень любопытно узнать, возможна ли функция, принимающая массив и возвращающая массив в моем случае.