如何将文本列转换为另一列中描述的类型?



有键值配置表

如何通过比较文本值作为整数或双精度来选择记录?

create type val_enum as enum (
'text',
'integer',
'double',
'boolean',
'date'
);
create table conf (
id      serial primary key,
name    varchar(16),
val     varchar(16),
val_en  val_enum
);

示例表:

id  name    val     val_en
--------------------------- 
1   age     34      integer
2   name    john    text
3   male    true    boolean
4   weight  71.2    double  
select *
from conf
where (name = 'weight') and 
(val::val_en > 70) ???

将文本转换为类型然后对其进行比较在SQL中是不现实的,因为比较不会对所有结果类型有效。

如果你有文本,你必须使用文本方法:

select *
from conf
where name = 'weight'
and val regexp_like '^([0-9]{3}|[8-9][0-9]|7[1-9]|70.*[1-9])'

该正则表达式匹配大于70的任何数字。

如果比较运算符是>=而不是>,那么正则表达式会简单得多