在Oracle SQL的日期字段中插入时间

在Oracle SQL的日期字段中插入时间,sql,oracle,date,Sql,Oracle,Date,是否只在“日期”类型的SQL字段中插入时间(无日期) 我尝试插入: 13:00 及 及 及 但是不断地得到错误: Not A Valid Month 问题在于字面意义。对于日期/时间值,Oracle希望值的格式为ddMMMyyyy。(或者,您可以使用表达式DATE'2001-01-01。文字值将被解释。)没有日期的时间似乎没有默认格式 换句话说,您可以使用cast('1/1/2001'作为日期)获得相同的错误 相反,请使用to_date()函数: select to_date('10:00'

是否只在“日期”类型的SQL字段中插入时间(无日期)

我尝试插入:

13:00

但是不断地得到错误:

Not A Valid Month

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

换句话说,您可以使用
cast('1/1/2001'作为日期)
获得相同的错误

相反,请使用
to_date()
函数:

select to_date('10:00', 'hh:mi')
from dual
这为您提供了更大的格式灵活性


此外,正如Ben在评论中所指出的,这将为您提供指定时间的当前日期。

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

换句话说,您可以使用
cast('1/1/2001'作为日期)
获得相同的错误

相反,请使用
to_date()
函数:

select to_date('10:00', 'hh:mi')
from dual
这为您提供了更大的格式灵活性


此外,正如Ben在评论中所指出的,这将为您提供指定时间的当前日期。

使用SYSDATE和某个日期的提取和仅时间部分的示例…:

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
 )
/

使用SYSDATE和某个日期的提取和仅时间部分的示例…:

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
 )
/

应该怎么做?不,等等-为什么?线索在数据类型名称中。。。一言为定。日期有一天、一个月和一年……我在搜索引擎中使用了“在Oracle中存储时间”,并找到了一些关于这方面的文章。你可以试试。我还在Oracle文档中发现了一种间隔数据类型。这可能满足您的需要。Oracle中@Ben:的可能副本a
DATE
还包括时间部分。您不能在
日期
列中仅插入时间。应如何操作?不,等等-为什么?线索在数据类型名称中。。。一言为定。日期有一天、一个月和一年……我在搜索引擎中使用了“在Oracle中存储时间”,并找到了一些关于这方面的文章。你可以试试。我还在Oracle文档中发现了一种间隔数据类型。这可能满足您的需要。Oracle中@Ben:的可能副本a
DATE
还包括时间部分。您不能只在
日期
列中插入时间。这将在表中插入当前日期,因此您必须始终记住在以后删除它。最好以一天到一秒的间隔或从午夜开始的秒数存储,就像在dupe中一样。@Ben。这是正确的。谢谢你的进一步澄清。我只是想说明为什么会发生错误。这将在表中插入当前日期,因此您必须始终记住在以后删除它。最好以一天到一秒的间隔或从午夜开始的秒数存储,就像在dupe中一样。@Ben。这是正确的。谢谢你的进一步澄清。我只是在解释为什么会发生错误。
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
 )
/