使用Oracle检查日期值的最理想方法是什么

时间:2019-03-19 19:18:33

标签: sql oracle oracle11g

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

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

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

方法1:

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

方法2:

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

应选择哪种方法?

2 个答案:

答案 0 :(得分:1)

我认为,永远不要将日期(或时间)值存储到VARCHAR2列中。没有优势,有很多劣势。

答案 1 :(得分:0)

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