[英]Oracle SQL CHECK CONSTRAINT 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, '?????') );
任何帮助表示赞赏。
我可能会做类似的事情
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
函数将它们都转换为数字,然后验证范围。
我必须在数据库中放置时间,但是我不需要数据,这就是为什么我不想使用DATETIME类型
您不必分别担心date
和time
部分。 DATE
数据类型将同时包含这两个部分,您所需要的只是使用具有正确format model
to_char
。
因此,您可以将列设为-
visit_hours DATE
编辑杰弗里·和Ben说,当数据类型是没有必要的约束DATE
。 只需按照我上面的解释即可。
您不需要任何约束-仅使用DATE
数据类型,它也存储时间值。 您的应用程序可以使用TO_CHAR(visit_hours, 'HH24:MI')
提取时间TO_CHAR(visit_hours, 'HH24:MI')
而忽略日期部分和秒部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.