我想检查postgres中的值类型,如下所示:
SELECT id,
CASE
WHEN val_is_integer THEN (SOME_QUERY)
WHEN val_isnot_integer THEN (ANOTHER_QUERY)
ELSE 0
END
FROM test;
Run Code Online (Sandbox Code Playgroud)
怎么做?
注意:表中的值是varchar类型,在该字段中有值是numeric和varchar ...
例:
ID | value
1 | test
2 | 10
3 | 12
4 | test123
Run Code Online (Sandbox Code Playgroud)
Arc*_*oob 44
如果有人想知道如何获取变量(不是列)的数据类型,则可以使用该pg_typeof(any)函数.
只是
SELECT pg_typeof(your_variable);
Run Code Online (Sandbox Code Playgroud)
要么
SELECT pg_typeof('{}'::text[]); //returns text[];
Run Code Online (Sandbox Code Playgroud)
注意
无论列的内容如何,pg_typeof(varchar_column)都将返回不同的字符.已经键入任何列或变量,pg_typeof将返回该声明的类型.根据该列(或变量)的值,它将找不到"最佳拟合"类型.- 引用a_horse_with_no_name的评论.
您的值列始终是varchar类型,您似乎要检查内容是否为数字/整数.
你可以通过创建一个函数来做到这一点,例如
create function isdigits(text) returns boolean as '
select $1 ~ ''^(-)?[0-9]+$'' as result
' language sql;
Run Code Online (Sandbox Code Playgroud)
(该函数可能通过尝试将文本转换为int,或使用int4()函数并捕获发生的错误,并返回NULL来实现.)
有了这样的功能,你可以做到:
SELECT id,
CASE
WHEN value IS NULL THEN 0
WHEN isdigits(value) THEN (SOME_QUERY)
ELSE (ANOTHER_QUERY)
END
FROM test;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35138 次 |
| 最近记录: |