我想创建一个CHECK约束,以检查条形码字段的第一和第二个元素是否与project_code和center_code字段中提供的数据匹配,例如。
+----------------+--------------+-------------+
| barcode | project_code | center_code |
+----------------+--------------+-------------+
| PP22-NY-1BCDE6 | PP22 | NY |
+----------------+--------------+-------------+
我尝试使用
barcode ~ ^[A-Z0-9]{4}-[A-Z0-9]{2}-[A-Z0-9]{6}$
在某种程度上可以使用,但是与project_code和center_code不完全匹配的条形码仍然可以匹配。如何在PostgreSQL的CHECK约束中合并其他字段值来做到这一点?
答案 0 :(得分:1)
您会这样做:
constraint chk_t_barcode check (barcode like project_code || '-' || center_code || '-%')
如果您想确保最后六个字符是字母数字:
constraint chk_t_barcode check (barcode ~ project_code || '-' || center_code || '-[a-zA-Z0-9]{6}')