CHECK约束以检查子字符串是否与其他列匹配(PostgreSQL)

时间:2018-09-23 01:30:32

标签: sql database postgresql

我想创建一个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约束中合并其他字段值来做到这一点?

1 个答案:

答案 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}')