繁体   English   中英

Oracle SQL检查约束VARCHAR

[英]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类型

您不必分别担心datetime部分。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM