如何进行约束,检查前两个值和后两个不同范围的值?我必须把时间放在数据库中,但我不需要数据,这就是为什么我不想使用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, '?????') );
任何帮助表示感谢。
答案 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类型的原因
您不必分别担心date
和time
部分。 DATE
数据类型将包含这两个部分,您只需使用to_char
format model
。
因此,您可以将列设为 -
visit_hours DATE
编辑正如Jeffrey和Ben所说,当数据类型为DATE
时,不需要约束。按照我上面解释的那样。
答案 2 :(得分:0)
您不需要任何约束 - 只需使用DATE
数据类型,它也会存储时间值。您的应用程序可以使用TO_CHAR(visit_hours, 'HH24:MI')
提取时间并忽略日期部分和秒部分。