我表的特定列是hour_init,另一列是hour_end。我正在尝试建立一个检查约束,该约束确定hour_init和hour_end是否都遵循以下规则:
我已经阅读和/或弄清楚了一些方法,但是我无法决定什么是“最佳实践”或理想的解决方案。
方法1:
使用2列类型varchar2创建表。创建一个检查约束,将每个varchar2分成子字符串(在“:”之前和之后),将子字符串转换为数字,并检查它们是否遵循规则2和3。我不知道此方法的优劣。
方法2:
使用2列DATE或TIMESTAMP类型创建表。然后将这些DATE格式化为HH:MM,然后检查是否插入了该值,其小时和分钟是否遵循规则2和3。
应选择哪种方法?
答案 0 :(得分:1)
我认为,永远不要将日期(或时间)值存储到VARCHAR2
列中。没有优势,有很多劣势。
答案 1 :(得分:0)
如果您将列创建为DATE或TIMESTAMP的某种变体(取决于所需的粒度),则无需检查。 Oracle不允许您将无效值放入这两种数据类型中的任何一种。这是您永远不要使用varchar2或数字来保留日期/时间的众多原因之一。