2016-04-01 8 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

関連する問題