有键值配置表
如何通过比较文本值作为整数或双精度来选择记录?
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的任何数字。
如果比较运算符是>=
而不是>
,那么正则表达式会简单得多