Oracle SQL CHECK CONSTRAINT VARCHAR

时间:2015-01-04 07:39:44

标签: sql oracle constraints varchar

如何进行约束,检查前两个值和后两个不同范围的值?我必须把时间放在数据库中,但我不需要数据,这就是为什么我不想使用DATETIME类型。我只需要一个TIME,但据我所知,Oracle中没有TIME数据类型。

我的专栏如下:

visit_hours VARCHAR(4) 

所以前2个字符是00到23,后2个字符是00到59,所以我可以存储从00:00到23:59的时间。

我该怎么做?我已经找到了类似正则表达式的东西,但我不知道如何在这个例子中实现它。

CONSTRAINT check_time CHECK (regexp_like(visit_hours, '?????') );

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:2)

我可能会做类似

的事情
CONSTRAINT check_time CHECK( to_number( substr( visit_hours, 1, 2 ) ) BETWEEN 0 AND 23 AND
                             to_number( substr( visit_hours, 3, 2 ) ) BETWEEN 0 AND 59 );

substr( visit_hours, 1, 2 )为您提供字符串中的前两个字符,substr( visit_hours, 3, 2 )为您提供第三个和第四个字符。使用to_number函数将两者转换为数字,然后验证范围。

答案 1 :(得分:1)

  

我必须在数据库中投入时间,但我不需要数据,这就是我不想使用DATETIME类型的原因

您不必分别担心datetime部分。 DATE数据类型将包含这两个部分,您只需使用to_char format model

因此,您可以将列设为 -

visit_hours DATE

编辑正如Jeffrey和Ben所说,当数据类型为DATE时,不需要约束。按照我上面解释的那样。

答案 2 :(得分:0)

您不需要任何约束 - 只需使用DATE数据类型,它也会存储时间值。您的应用程序可以使用TO_CHAR(visit_hours, 'HH24:MI')提取时间并忽略日期部分和秒部分。