Oracle日期字段的查询时间

问题描述:

我有一个DATE类型的列,存储的数据包含日期和时间。我可以看到价值时,我做Oracle日期字段的查询时间

select CAST(MSG_DT AS TIMESTAMP) from table; 

这是输出

17-MAR-08 15:38:59,000000000 

我必须选择使用

  • 仅日期

    select  CAST(MSG_DT AS TIMESTAMP) from 
    MWRB_RECEIVE where 
    MSG_DT >= TO_DATE('2000-02-03' ,'YYYY-MM-DD') 
    and 
    MSG_DT <= TO_DATE('2010-02-03' ,'YYYY-MM-DD') 
    
  • 只有一行时间(例如:每个消息下注吐温12点00分十一秒和23时02分55秒)


在DB2我可以做

SELECT *       
FROM TABLE    
WHERE DATE(INS_TMS) = '2014-02-18' 

SELECT *       
FROM TABLE    
WHERE TIME(INS_TMS) > '09.55.00' 

在ORACLE我看不到的等价物。

唯一试试这个:

SELECT * 
    FROM your_table 
WHERE TO_CHAR (start_date, 'yyyy-mm-dd') = '2014-10-06' 
     AND TO_CHAR (start_date, 'hh24:mi:ss') > '10:00:00' 
+0

好的,但你写这个是因为你确定没有TIME函数,或者因为它更简单地使用char。正如我告诉Raad最近的一个是EXTRACT,但我必须使用字符串。这很容易出错。 – user1594895 2014-10-06 16:13:55

+0

to_Char是我知道这样做的方式。如果存在一个时间函数可以做到这一点,好得多,但直到现在我还没有看到它。 – Aramillo 2014-10-06 16:18:16

+0

好的,我没有使用你的方法: – user1594895 2014-10-06 16:31:45

当数据库中的列是DATE类型时,为什么要将列值转换为TIMESTAMP?秒的小数部分将始终为0,因为DATE仅具有秒值的分辨率。你需要的小时,分​​钟和秒的格式说明添加到查询:

select MSG_DT from 
MWRB_RECEIVE 
where MSG_DT between TO_DATE('2000-02-03 12:00:11' ,'YYYY-MM-DD HH24:MI:SS') AND 
      TO_DATE('2010-02-03 23:02:55' ,'YYYY-MM-DD HH24:MI:SS') 
+0

这是很好,当我有一个初始日期和结束日期。在我的情况下,第二个问题不使用任何日期,因为我没有开始日期或结束日期 – user1594895 2014-10-06 16:04:12

+0

我只使用可视化purpouse的演员阵容。 – user1594895 2014-10-06 16:07:24

有没有需要分割日期和时间,你可以把它在一个单一的where子句

其中现场> TO_DATE('20121212 12时12分十二秒, 'YYYYMMDD HH24:MI:SS')

检查供你参考的Oracle TO_DATE(),因为它似乎你需要

+0

对不起,我的问题是“只有时间(例如:12:00:11和23:02:55之间的每条消息)”我对DATE每天都不感兴趣。我没有DATE间隔只有时间间隔。 – user1594895 2014-10-06 16:10:10