sql - 在 oracle 中,如何创建一个检查约束来检查时间是否在 10:00:00 和 21:00:00 之间?
问题描述
在 Oracle 数据库中,我有一个注册日期列。使用 SQL,我想添加一个检查约束,检查日期时间是否在 10:00:00 和 21:00:00 之间。我怎样才能做到这一点?
解决方案
理想情况下,约束应尽可能使用日期时间(和间隔)表达式和函数。唉,在 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
条件中使用 . 在这些情况下,以这种方式编写条件的优势(可读性)变得更加明显。
推荐阅读
- amazon-web-services - 在 s3 存储桶中提取 Zip 文件
- android - 如何在 Chromecast android sender SDK 的字幕对话框中更改颜色?
- r - 在 ggplot 中绘制李克特量表调查问题
- python - 低级 TensorFlow,dataset.as_numpy_iterator() 返回 dicts 而不是 numpy 数组
- git - 对原始仓库和本地仓库使用不同的 git 版本是否安全?
- mysql - 是否可以从多个表中提取结果,然后将结果插入到与 MySQL 相同的查询中的另一个表中?
- firebase - Firebase.initializeApp() 是否需要网络连接?
- apache-kafka - 如何使用 Kafka Confluent C# 客户端发送原始 Json?
- scala - 添加父列名称作为前缀以避免歧义
- c# - C# 实体框架:插入子实体并更新父实体,一个事务