【问题标题】:Date type without time in OracleOracle中没有时间的日期类型
【发布时间】:2012-05-03 10:11:23
【问题描述】:

在 Oracle 10g 中,我在表中使用 DATE 时遇到问题。我只希望我的DATE 字段只存储DATE 而没有时间自动。

有这么多的解决方案,我知道它就像使用TO_CHARTO_DATETRUNC 但我面临着我使用这么多程序来插入或更新数据并且没有时间更新所有这些。

我该如何解决这个问题?

【问题讨论】:

  • 我个人仍然使用日期类型并将时间重置为0。
  • @ericosg 如何将时间重置为 0?
  • 我认为 Rob van Wijk 回答得很好
  • 我认为这个问题需要详细说明。当您想在有问题的DATE 列上建立PK 时,没有JUST_DATE 数据类型成为一个真正的问题。如果您希望您的表格每个日期只包含一个条目,那么您要么必须确保数据在您 INSERT 之前是干净的(即您必须将其编程到您的 API 中),或者您需要对您的列,正如@Rob-van-wijk 在他的(第一)点 2 中所述。

标签: oracle datetime date oracle10g


【解决方案1】:

最好的解决办法是:

  1. 从 DATE 列中删除所有时间 (update yourtable set yourdatecolumn = trunc(yourdatecolumn))

  2. 通过使用check (yourdatecolumn = trunc(yourdatecolumn))在列上放置检查约束,确保所有未来日期不包含时间部分

  3. 调整所有 INSERT 和 UPDATE 语句,或者 - 如果幸运的话 - 调整 API,只插入 TRUNCed 日期。

最简单的解决方案是:

  1. (可选)从 DATE 列中删除所有时间。

  2. 创建设置:new.yourdatecolumn := trunc(:new.yourdatecolumn);的前行插入或更新数据库触发器

【讨论】:

  • 非常感谢,对我来说最好的解决方案是:先更新所有 DATE 列,然后在插入行之前添加触发器 :)
  • 请注意,当某些版本将检查约束添加到执行计划中时(例如,如果您说“where yourdatecolumn = ...”),它们可能会计算出错误的小基数估计结果。我认为是 10.1
  • Oracle 中是否没有“内置”数据类型只存储日期(没有时间和时区等)?
  • 不,带有检查约束的 DATE 列是最接近的。
【解决方案2】:

我是这样用的

插入:Insert into table (name_date) values(to_date(current_date,'dd/mm/yyyy')); 更新:update table set name_date=to_date(current_date,'dd/mm/yyyy') where id=1;

就是这样……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2017-04-09
    • 2019-02-11
    • 2018-09-24
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多