如何检查postgres中的值类型

时间:2010-09-30 04:51:20

标签: sql postgresql

我想检查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 个答案:

答案 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;