Postgresql
使用 postgresql 中的檢查約束驗證列是否包含字元
桌子:
create table tempchkconstraint ( colcode varchar, colname varchar, lastmoddate timestamp without time zone );
如果任何帶有字元“-”的數據試圖插入/更新添加約束,則需要驗證“colcode”列:
alter TABLE tempchkconstraint add constraint chk_tempchkconstraint_code check (colcode NOT ILIKE '%-%') ;
約束正在起作用。還有其他更好的方法嗎?
這個條件應該是等價的,但更快:
strpos(colcode, '-') = 0
這就是您要確保沒有包含“-”字元的字元串的方法。為了完成,另一種方法是通過正則表達式檢查:
CHECK (colcode !~ '.*-.*')
這對於單字元檢查來說是多餘的,但允許更複雜的檢查。
此外,如果應用程序嘗試插入包含“-”的字元串,約束將向應用程序拋出錯誤,但是,如果您只想過濾掉斜杠,則可以使用觸發器來執行此操作:
CREATE FUNCTION replace_slash() RETURNS trigger AS $replace_slash$ BEGIN IF NEW.colcode ILIKE '%-%' THEN NEW.colcode = replace(NEW.colcode,'-',''); END IF; RETURN NEW; END; $replace_slash$ LANGUAGE plpgsql; CREATE TRIGGER no_slashes BEFORE INSERT OR UPDATE OF colcode ON tempchkconstraint FOR EACH ROW EXECUTE FUNCTION replace_slash();