【问题标题】:What is the most ideal approach to check date values with Oracle使用 Oracle 检查日期值的最理想方法是什么
【发布时间】:2019-03-19 19:18:33
【问题描述】:

我的表的一个特定列是hour_init,另一列是hour_end。我正在尝试构建一个检查约束来确定 hour_init 和 hour_end 是否都遵循以下规则:

  • 规则 1:格式必须为 HH:MM
  • 规则 2:HH 必须小于 24
  • 规则 3:MM 必须小于 59

我已经阅读和/或想出了一些方法,但我无法决定什么是“最佳实践”或理想的解决方案。

方法一:

创建具有 2 列类型为 varchar2 的表。创建一个检查约束,将每个 varchar2 拆分为子字符串(在“:”之后和之前),将子字符串转换为数字并检查它们是否遵循规则 2 和 3。我不知道这种方法的好坏。

方法二:

创建具有 2 列类型为 DATE 或 TIMESTAMP 的表。然后将这些 DATE 格式化为 HH:MM,然后检查插入的值,其小时和分钟是否遵循规则 2 和 3。

应该选择什么方法?

【问题讨论】:

  • 为什么不使用 type INTERVAL DAY TO SECOND 这比你需要的要细一些,但至少它是正确输入的。然后您可以使用文字 INTERVAL '09:30' HOUR TO MINUTE 插入 9 小时 30 分钟(例如)

标签: sql oracle oracle11g


【解决方案1】:

在我看来,永远不要将日期(或时间)值存储到 VARCHAR2 列中。没有优点,缺点很多。

【讨论】:

    【解决方案2】:

    如果您将列创建为 DATE 或 TIMESTAMP 的某些变体(取决于您需要的粒度),则无需检查。 Oracle 不会让您将无效值放入其中任何一种数据类型中。这是您永远不应该使用 varchar2 或 number 来保留日期/时间的众多原因之一。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      相关资源
      最近更新 更多