gpt4 book ai didi

oracle - Oracle 中合理的年份数据类型是什么?

转载 作者:行者123 更新时间:2023-12-01 10:00:13 27 4
gpt4 key购买 nike

我想到了两种可能性:

  • NUMBER(4)
  • 日期

Pro NUMBER(4):

  • 如果指定为 UNIQUE,则不可能有重复条目
  • 简单算术(加一,减一)

Con NUMBER(4):

  • 无验证(例如负数)

Pro 日期:

  • 验证

Con 日期:

  • 可以有重复条目('2013-06-24'、'2013-06-23'、...)
  • 不是那么简单的算术(加一 = ADD_MONTHS(12))

作为附加要求,将列与当前年份进行比较 EXTRACT (YEAR FROM SYSDATE)。在我看来,NUMBER(4) 是更好的选择。您怎么看,还有我错过的其他选择吗?

最佳答案

如果您愿意,您可以使用基于函数的索引将 date 列限制为每年只有一个条目:

create unique index uq_yr on <table> (trunc(<column>, 'YYYY'));

尝试在同一年插入两个日期会导致 ORA-00001 错误。当然,如果您不想要剩余的日期,那么保留它可能无益或令人困惑,但另一方面,您可能想要保留次要信息(例如,如果您正在记录年度审计发生了,保留完整日期可能不会造成任何伤害)。也许您还可以有一个虚拟列(来自 11g),其中包含 trunc 值以便于操作。

您还可以使用 interval year(4) to month 数据类型,并使用 numtoyminterval(2013, 'year') 等插入。您可以执行 interval加减年份的算术运算,以及 extract 将年份作为数字返回。不过,总的来说,这可能比使用 date 更痛苦。

如果您真的只对年份感兴趣(并且您没有将月份保存在不同的列中!)那么数字可能是最简单的,并带有检查约束以确保它是一个合理的数字 - number(4) 不会阻止您插入 2.013 当您的意思是 2,013 (尽管您需要从字符串转换才能命中它,并且没有 NLS 参数不匹配),它将被截断为 2

关于oracle - Oracle 中合理的年份数据类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278331/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com