2014-10-06 197 views
0

我有一個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我看不到的等價物。

回答

0

唯一試試這個:

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

0

當數據庫中的列是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

0

有沒有需要分割日期和時間,你可以把它在一個單一的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