在SQL Server(T-SQL)中,我们可以像在此处发布一样:
http://www.sqlrelease.com/allow-only-alphanumeric-characters-in-a-column
如何在PostgreSQL中做同样的事情?
以下没有成功 -
CREATE OR REPLACE FUNCTION dummy.checkalphanumeric(username character varying(32))
RETURNS integer AS
$BODY$
BEGIN
RETURN (SELECT CASE WHEN regexp_matches(username, '%[^a-zA-Z0-9]%') >
false THEN false ELSE true END);
END; $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION dummy.checkalphanumeric(username character varying(32))
OWNER TO postgres;
和ALTER查询 -
ALTER TABLE dummy.provisioning_user ADD CONSTRAINT
CK_provisioning_user CHECK (dummycheckalphanumeric(username) = 1)
答案 0 :(得分:5)
不需要你自己的功能。
另外:%
不是正则表达式的通配符。在该示例中使用它的原因是该示例适用于不支持正则表达式的SQL Server(但我不明白为什么在SQL Server中需要单独的函数)
ALTER TABLE dummy.provisioning_user
ADD CONSTRAINT CK_provisioning_user
CHECK (regexp_matches(username, '[a-zA-Z0-9]*'));
约束将检查仅包含字符(来自a-z)和0-9位数的值。它将允许"什么都没有"虽然。如果您不想要,则需要使用'[a-zA-Z0-9]+'
作为正则表达式