Как проверить тип значения в postgres
Я хочу проверить тип значения в postgres следующим образом:
SELECT id,
CASE
WHEN val_is_integer THEN (SOME_QUERY)
WHEN val_isnot_integer THEN (ANOTHER_QUERY)
ELSE 0
END
FROM test;
Как это сделать?
Примечания:
значение - тип varchar в таблице, и в этом поле есть значение numeric и varchar...
Пример:
ID | value
1 | test
2 | 10
3 | 12
4 | test123
Ответы
Ответ 1
Если кто-то еще задается вопросом Как просто получить тип данных с переменной (не столбцом), вы можете использовать функцию pg_typeof(any)
.
Просто
SELECT pg_typeof(your_variable);
ИЛИ
SELECT pg_typeof('{}'::text[]); //returns text[];
Примечание
pg_typeof (varchar_column) возвращает символ, изменяющийся независимо от содержимое столбца. Любой столбец или переменная уже введен и pg_typeof вернет этот объявленный тип. Он не найдет "лучших" подгонка "в зависимости от значения этого столбца (или переменной). - цитата из комментария a_horse_with_no_name.
Ответ 2
Ваш столбец значений всегда имеет тип varchar, кажется, вы хотите проверить, является ли контент числом/целым числом.
Это можно сделать, создав функцию, например
create function isdigits(text) returns boolean as '
select $1 ~ ''^(-)?[0-9]+$'' as result
' language sql;
(Эта функция, вероятно, может быть реализована путем попытки передать текст в int или с помощью функции int4() и поймать ошибку, которая также возникает, и вернуть NULL.)
С такой функцией вы можете сделать:
SELECT id,
CASE
WHEN value IS NULL THEN 0
WHEN isdigits(value) THEN (SOME_QUERY)
ELSE (ANOTHER_QUERY)
END
FROM test;