约束检查db2,其中username只能有a-z或_和一定长度

时间:2016-05-26 16:45:59

标签: sql db2 constraints

我需要在db2中编写一个约束,其中用户名必须以@开头,后跟字母数字模式,最大长度为31,并且只能包含小写字母,数字和_(下划线)符号。我这样做了:

ALTER  TABLE KUNDENKONTAKTDATEN ADD CONSTRAINT
  TwitterID_CHECK CHECK ( trim(length(TWITTER_ID)) <= 31 AND TWITTER_ID like '@%')

我的问题是该部分只包含小写字母,数字和_。

这是我的作业问题,提示是使用Trim,Translate,Length和Substr等功能,但我可以使用其他功能。互联网告诉我使用fn:matches函数,但我不确定它是如何工作的。

任何人都可以帮我解决这个问题,无论是否使用fn:matches?

提前谢谢

编辑:实际上并不是this的副本,但可以应用类似的方法来检查它是否包含非法值。这个问题不仅仅是关于查找列是否包含特殊字符。我的问题的一部分是唯一的:长度,从开始,没有找到它是否具有特殊字符,但只允许一个特殊字符(_)作为值,因此不是重复。

1 个答案:

答案 0 :(得分:0)

最后,这解决了这个问题。

ALTER TABLE KUNDENKONTAKTDATEN
ADD CONSTRAINT
TwitterID_CHECK CHECK (trim(length(TWITTER_ID)) <= 31 AND TWITTER_ID LIKE '@%' 
AND LENGTH(TRIM(TRANSLATE(TWITTER_ID, ' ',
'abcdefghijklmnopqrstuvwxyz0123456789_@'))) = 0)

感谢@Hogan和@mustaccio