SQL检查约束 - 如何检查特定格式?

时间:2015-06-17 12:21:40

标签: sql oracle varchar check-constraints

我正在尝试为我的专栏添加CHECK约束以获得足球比赛得分。格式必须是这样的 - > 4-2(带连字符)两个数字也不能超过999.

以下是我到目前为止显然无效的内容。任何想法? 列数据类型为VARCHAR(7)

Constraint ScoreCheck CHECK(Score LIKE '0-999'-'0-999'); 

3 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是使用视图或虚拟列。虚拟列自11g起可用。只需在表格中定义虚拟列,例如:

create table  . . . 
    WinningScore int,
    LosingScore int,
    GameScore as (WinningScore || '-' || LosingScore)
)

(您也可以将alter table用于现有表格。)

Here在虚拟列上有点引用。

答案 1 :(得分:1)

而不是LIKE,你应该使用REGEXP_LIKE

  

Constraint ScoreCheck CHECK(   REGEXP_LIKE(分数,' ^ [0-9] {1,3} - [0-9] {1,3} $&#39);

另外,为了进一步使用,您应该将此字段拆分为主队得分并远离球队得分并将其存储为整数,以便处理它们很容易

答案 2 :(得分:-1)

这可以使用正则表达式完成:

Constraint ScoreCheck CHECK(regexp_like(Score, '^[0-9]{1,3}-[0-9]{1,3}$'))