2016-06-13 210 views
2

我想要的方式來創建火鳥(2.5)一列,它:檢查contraint只允許某些字符

  • 不能爲空
  • 必須恰好爲16個字符
  • 能只包含數字和小寫字母a - f

我可以解決第一個和第二個限制。

ALTER TABLE TEST_TABLE ADD NEW_COLUMN CHAR(16) NOT NULL CHECK (CHAR_LENGTH(TRIM(VALUE)) = 16) 

我寧願不使用觸發器的第三個要求,但檢查約束 - 有沒有辦法做到這一點?

回答

2

您能使用SQL regexes嗎?

CHECK (value SIMILAR TO '[a-f0-9]{16}') 

這些是在Firebird 2.5中引入的,並且,爲了您的目的,方便地,必須匹配整個字符串。 (也就是說,它們「錨定」在搜索空間的兩端)。

+0

工作正常,我只需將'a-z'更改爲'a-f'。我沒有意識到這個事實,它已經在2.5版本中引入了,一直認爲它是一個新的firebird 3特性。 –