目录
需求
某个数据表字段的值,只能是一些固定的枚举值,如001,002,003等。如果是固定枚举值的单个值枚举,一般sql就写成col in('001','002','003')。现在需求是,字段内容可能是枚举值的任意值通过分隔符拼接,校验用分隔符split之后的值都在枚举值范围内,即组合枚举、
实现
1、字段指定分隔符
如,字段内容,只可能是'001','002'或者'001,002',那就可以用下面方案:string_to_array(col,指定的分隔符 )<@ arrays['001','002','003']
@>运算符可以用于比较数组的元素是否包含在另一个数组中,比较有大>,<,>=,<=
@>包含是指数组A里有数组B的所有元素,,@< 则相反
组合值枚举,一般会想过Pg的Array函数。
例子:字段可以是周一到周三的任意组合,英文逗号拼接
select * from ogc_cjt1
组合枚举,看remark是周一到周三的任意组合,英文逗号拼接
select * from ogc_cjt1
where string_to_array(remark,',') <@ ARRAY['周一','周二','周三']
2、字段不指定分隔符
考虑用正则。匹配枚举值以及可能的一些分隔符
select * from ogc_cjt1
where remark ~'^[(周一)(周二)(周三)(周四)(周五)(周六)(周日),、,\s]+$'