我有一个表格列p,它应该只包括Cash_1,Cash_2,Cash_3等Cash_36之类的条目。 我无法将其用作检查约束。 我试过检查((p> ='Cash_1'和p< ='Cash_36')和p像'Cash_%') 但我无法输入Cash_4或Cash_5等数据。 即使我这样做,我也无法确保'Cash_'之后的字符串是一个数字 Plz帮助
答案 0 :(得分:2)
您需要结合两个检查。
您需要使用正则表达式来验证值Cash_
后跟一位或两位数字:
check (p ~ 'Cash_[0-9]{1,2}')
然而,这也允许例如Cash_00
或Cash_99
。因此,您需要另一个条件来检查数字是否在1到36之间
check (p ~ 'Cash_[0-9]{1,2}' and regexp_replace(p, '[^0-9]', '', 'g')::int between 1 and 36)
regexp_replace(p, '[^0-9]', '')
删除字符串中的所有非数字,然后使用::int
将结果强制转换为整数。然后检查该数字的适当间隔。