将 TIME 插入 Oracle SQL,DATE 字段

Posted

技术标签:

【中文标题】将 TIME 插入 Oracle SQL,DATE 字段【英文标题】:Insert TIME into Oracle SQL, DATE field 【发布时间】:2013-02-23 20:58:22 【问题描述】:

有没有办法只在“日期”类型的 SQL 字段中插入时间(无日期)

我试过插入:

13:00

01:00

13:00pm

01:00pm

但不断收到错误:

Not A Valid Month

【问题讨论】:

应该怎么做?无需等待 - 为什么? 线索在数据类型名称中...它是一个日期...日期有一天、一个月和一年... 我在搜索引擎中使用了“在 Oracle 中存储时间”,并找到了一些关于此的文章。你可以试试。我还在 Oracle 文档中找到了一个区间数据类型。这可能会满足您的需求。 How to store in the field only time, not date + time pair? 的可能重复项 @Ben:在 Oracle 中,DATE 还包括时间部分。您不能DATE 列中插入时间。 【参考方案1】:

问题在于文字。对于日期/时间值,Oracle 需要 ddMMMyyyy 格式的值。 (或者,您可以使用表达式DATE '2001-01-01。文字值解释为here。)没有日期的时间似乎没有默认格式。

换句话说,您可以使用cast('1/1/2001' as date) 得到相同的错误。

改为使用to_date() 函数:

select to_date('10:00', 'hh:mi')
from dual

这为您提供了更大的格式灵活性。

此外,正如 Ben 在 cmets 中指出的那样,这会为您提供当前日期和指定时间。

【讨论】:

这会将当前日期插入到表格中,因此您必须记住之后将其删除。最好将其存储在 INTERVAL DAY TO SECOND 或自午夜以来的秒数中,就像在欺骗中一样。 @Ben。 . .那是对的。感谢您的进一步澄清。我只是在解决发生错误的原因。【参考方案2】:

使用 SYSDATE 和某个日期的 EXTRACT 和仅时间部分的示例...:

SELECT hh||':'||mi||':'||ss time_only_portion
  FROM
  ( 
  Select
    EXTRACT(hour   From Cast(SYSDATE as timestamp)) hh,
    EXTRACT(minute From Cast(SYSDATE as timestamp)) mi,
    EXTRACT(second From Cast(SYSDATE as timestamp)) ss
  From dual
 )
/

SELECT EXTRACT(HOUR From t_stamp) hh
  FROM
 (
 SELECT CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy  hh:mi:ss am') AS TIMESTAMP) t_stamp 
   FROM dual
 )
/

【讨论】:

以上是关于将 TIME 插入 Oracle SQL,DATE 字段的主要内容,如果未能解决你的问题,请参考以下文章

如何将系统时间插入到oracle数据库date类型中

在oracle中,如何在sql语句里讲系统当前时间插入表中

MySQL里的Date型和Time型两个字段,如何用PYTHON合并为一个Datetime字段

oracle用sql 语句如何向表中插入时间?

oracle中将原有的年、月、日个字段整合成日期形式插入数据库?

如何在oracle表格中自动插入当前时间?