首页 > 解决方案 > 在 oracle 中,如何创建一个检查约束来检查时间是否在 10:00:00 和 21:00:00 之间?

问题描述

在 Oracle 数据库中,我有一个注册日期列。使用 SQL,我想添加一个检查约束,检查日期时间是否在 10:00:00 和 21:00:00 之间。我怎样才能做到这一点?

标签: sqloracle

解决方案


理想情况下,约束应尽可能使用日期时间(和间隔)表达式和函数。唉,在 Oracle 中,日期算术主要使用数字(代表“天”),因此您确实需要在某个地方进行转换。

我会这样做 - 最容易(在我看来)让未来的开发人员阅读和理解:

check (numtodsinterval(reg_date - trunc(reg_date), 'day') 
           between interval '10' hour and interval '21' hour)

trunc(reg_date)返回日期,时间截断为午夜。然后reg_date - trunc(reg_date)返回存储在reg_date- 但结果是一个数字(以天表示)的时间。我将其转换为带有 的间隔numtodsinterval,指定数字代表“天”。其余的应该是显而易见的。

顺便说一句,如果您必须检查一天中的时间是否在例如 10:20 和 21:20 之间,您可以使用相同的方法 -interval 10:20 hour to minute例如,在between条件中使用 . 在这些情况下,以这种方式编写条件的优势(可读性)变得更加明显。


推荐阅读