Подтвердить что ты не робот

Как проверить тип значения в 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
4b9b3361

Ответ 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;