带有OR运算符的Oracle REGEXP_LIKE约束

时间:2015-09-22 00:25:35

标签: oracle

我想创建一个约束,它将检查PostalCode的格式,可以是A1A-1A1或11111.我有这样的命令

检查(REGEXP_LIKE(PostalCode,'[AZ] [AZ] [AZ] - [AZ] [AZ] [AZ]'||'[0-9] [0-9] [0-9] [0 -9] [0-9]'))

但是这个命令不起作用。我该如何修改该命令?

1 个答案:

答案 0 :(得分:0)

我假设您的格式类似于AAA-AAA或111-111或11111.如果没有,则更改下面的表达式(这是不言自明的)。

          REGEXP_LIKE (PostalCode, '[A-Z0-9][A-Z0-9][A-Z0-9]-[A-Z0-9][A-Z0-9][A-Z0-9]') 
          or REGEXP_LIKE (PostalCode,'[0-9][0-9][0-9][0-9][0-9]')

注意:但是从这里,您还将获得其中有额外字符的代码,例如AAA-AAAAAA或11111111.要检查这些代码,您也需要使用长度。

          (REGEXP_LIKE (PostalCode, '[A-Z0-9][A-Z0-9][A-Z0-9]-[A-Z0-9][A-Z0-9][A-Z0-9]') 
     and length(PostalCode) =7) 
          or ( REGEXP_LIKE (PostalCode,'[0-9][0-9][0-9][0-9][0-9]')  
     and length(PostalCode) =5)