检查sql中字符串中数字的约束

时间:2015-10-24 22:39:32

标签: sql postgresql

我有一个表格列p,它应该只包括Cash_1,Cash_2,Cash_3等Cash_36之类的条目。 我无法将其用作检查约束。 我试过检查((p> ='Cash_1'和p< ='Cash_36')和p像'Cash_%') 但我无法输入Cash_4或Cash_5等数据。 即使我这样做,我也无法确保'Cash_'之后的字符串是一个数字 Plz帮助

1 个答案:

答案 0 :(得分:2)

您需要结合两个检查。

您需要使用正则表达式来验证值Cash_后跟一位或两位数字:

check (p ~ 'Cash_[0-9]{1,2}')

然而,这也允许例如Cash_00Cash_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将结果强制转换为整数。然后检查该数字的适当间隔。