我想检查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
答案 0 :(得分:33)
如果有其他人想知道如何获取变量的数据类型( not column ),您可以使用pg_typeof(any)
函数。
简单地
SELECT pg_typeof(your_variable);
OR
SELECT pg_typeof('{}'::text[]); //returns text[];
注意
pg_typeof(varchar_column)将返回不同的字符 列的内容。任何列或变量都已输入 pg_typeof将返回该声明的类型。它不会找到“最好的 拟合“类型取决于该列(或变量)的值。 - 引用a_horse_with_no_name的注释。
答案 1 :(得分:6)
您的值列始终为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;