как проверить тип значения в postgres - PullRequest
32 голосов
/ 30 сентября 2010

Я хочу проверить тип значения в 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

Ответы [ 2 ]

36 голосов
/ 04 мая 2017

Если кому-то еще интересно Как просто получить тип данных переменной ( не столбец ), вы можете использовать функцию 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.

6 голосов
/ 30 сентября 2010

Ваш столбец значений всегда имеет тип 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...