【发布时间】:2019-12-12 15:18:15
【问题描述】:
我是正则表达式的新手,我正在使用 Postgres。我正在尝试在表中创建检查约束,以便某些列中的任何数据始终仅检查字母数字、数字、不带空格的字母数字等。
例如,给定一个像这样的表:
CREATE TABLE client (
PRIMARY KEY (id),
id CHAR(18) NOT NULL,
name TEXT NOT NULL,
promo_code TEXT NOT NULL
);
我想用一个 CHECK 做一个约束,它只允许 id 中没有空格内容的字母数字、名称中带有空格的字母、promo_code 中没有空格内容的字母数字和符号。 id 的长度严格为 18,但 name 和 promo_code 的长度可变。
会像下面这样工作吗?
ALTER TABLE client
ADD CONSTRAINT ck_client_one
CHECK (
id ~ '%\w%' AND id !~ '%\s%',
name ~ '%\w%' AND name !~ '%\d%',
promo_code ~ '%\w%' OR promo_code ~ '%\W%' AND promo_code !~ '%\s%'
);
ALTER TABLE client
ADD CONSTRAINT ck_client_two
CHECK (
id ~ '%^[a-zA-Z0-9]*%' AND id !~ '%\s%',
name ~ '%^[a-zA-Z]*%',
promo_code ~ '%^[a-zA-Z0-9]*%' OR promo_code !~ '%^[a-zA-Z0-9]*%'
AND promo_code !~ '%\s%'
);
rd_尼尔森
ALTER TABLE client
ADD CONSTRAINT ck_client_one
CHECK (
id ~ '.+\w+.+' AND id !~ '.+\s+.+',
name ~ '.+\w+.+' AND name !~ '.+\d+.+',
promo_code ~ '.+\w+.+' OR promo_code ~ '.+\W+.+'
AND promo_code !~ '.+\s+.+'
);
谢谢!
【问题讨论】:
-
你在使用 Postgresql 吗?`
-
是的,我正在使用 Postgresql
-
很高兴知道,不同的产品在正则表达式方面并不完全兼容。
标签: sql regex postgresql check-constraints