2016-04-01 34 views
0

我有一個小時的維度(時間維度)星型模式數據庫的時間維度,有以下的列在裏面:PLSQL:查詢星型模式不存儲日期

ID, ON_HOUR, ON_DAY, IN_MONTH, IN_YEAR 

我然後查詢數據庫,並且我想根據這個小時尺寸在給定日期的時間間隔內找到所有條目。

然而,比較ON_DAY屬性與間隔天數等等與IN_MONTH和IN_YEAR,我經常可以達到一個情況,我沒有收到任何數據,如果間隔跨越幾個月。因此,我需要將這些值轉換爲時間戳,但是我正在查詢數據庫,因此如何正確比較給定的時間戳和時間數據?我沒有在數據庫中存儲DATE或TIMESTAMP,我應該改變它嗎?

現在,我的最好的方法是這樣的:

to_timestamp('H.IN_YEAR-H.IN_MONTH-H.ON_DAY H.ON_HOUR:00:00', 'YYYY-MM-DD hh24:mi:ss') 

這似乎並不不過工作,而且看起來也狡猾,所以我真的不希望它...

在給定的日期間隔內獲得條目的最佳方式是什麼?

+0

爲什麼你認爲你需要一個存儲過程? –

回答

1

您似乎在傳遞時間戳函數中的文字字符串 - 您需要使用concat函數將值作爲串聯字符串傳遞。試試下面的代碼片段

(H.IN_YEAR||H-IN_MONTH||H.ON_DAY||H.ON_HOUR,'YYYMMDDHH24') 
+0

良好的捕捉.../ –

+0

謝謝,經過一些修改,這沒有把戲。你的面具缺少'Y',並且在「H-IN_MONTH」中有一個錯字,當然應該是「H.IN_MONTH」。 – Kirluu