2013-02-17 70 views
-1

我試圖實施一個域來檢查加拿大的正確郵政編碼。我寫了以下,但我得到一個約束錯誤。你能告訴我我哪裏可能是錯的嗎?我真的很感激。Postgresql - 域名爲加拿大郵政編碼

CREATE DOMAIN can_postal_code varchar(6) 
CONSTRAINT valid_postal_code 
CHECK (VALUE ~ '^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]\d[ABCEGHJKLMNPRSTVWXYZ]\d$'); 
+0

什麼是PostgreSQL的版本? – 2013-02-17 12:25:31

+0

這是我的postgresql版本 – ueg1990 2013-02-17 19:08:40

回答

1

PostgreSQL的up to 9.0使用美元報價:

CHECK (VALUE ~ 
    $regex$^[ABCEGHJKLMNPRSTVXY]\d[ABCEGHJKLMNPRSTVWXYZ]\d[ABCEGHJKLMNPRSTVWXYZ]\d$$regex$ 
); 
+0

這個表達式中的$ regex $意味着什麼?我想用正則表達式? – ueg1990 2013-02-17 19:09:30

+0

您可以使用雙美元內的任何字符串,包括空白字符。這只是爲了區分你的字符串內的任何其他對。那會發生在你的字符串末尾,你有字符串匹配美元的結尾。 – 2013-02-17 19:30:11

+0

@ ueg1990,檢查文檔中的[this](http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING)文章。 – vyegorov 2013-02-17 22:23:32

相關問題