2016-09-06 6 views
0

orcle dbに08.06.16 19:56:20,473000000の日付があります。Oracleタイムスタンプ丸め

CR_DATE - TIMESTAMP(6) 

私は日付を前の時間の先頭に切り捨て、エポック形式に変換する必要があります。たとえば、日付が上記のとおりであれば、08.06.16 19:00:00に四捨五入して最終的なo/pを1465412400として返すエポックに変換する必要があります。

以下のクエリを使用して変更できますエポック形式に変換しますが、最短時間への丸めは機能しません。

ROUND((CAST(CR_DATE AS DATE) - DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 

私は

select CR_DATE,TRUNC(CREATION_DATE, 'HH24') AS creationDate 

を使用している場合、私は08.06.16とHHとして値を取得:MMの詳細は切り捨てられます。

DBに設定NLS_TIMESTAMP_FORMATはDD.MM.RR HH24です:MI:SSXFF

誰かが私にはNSLのフォーマットを変更することなく、この問題を解決するのに役立つことはできますか?

+0

"最も近い時間に丸めた"と言っていますが、前の時間の先頭に切り捨てたいと思われるようです。どちらが正しいか'trunc(creation_date、 'HH24')'は時間に切り捨てられた 'date'を返します。あなたのクライアントは時間の部分を表示しないかもしれませんが、まだそこにあります。 –

+0

これを調べていただきありがとうございます。それは、前の時間の上に切り捨てられ、実際には最も近い時間に切り捨てられます。間違いをお詫び申し上げます。しかし、私は時間と共に価値をどのように得るのでしょうか。私は時間部分が完全に放出されることを望んでいません。 – RandomQuestions

+0

「実際に最も近い時間」とは何を意味しますか?私たちは切り捨てではなく丸めに戻っているようです。 –

答えて

0

あなたは

ROUND((TRUNC(CAST(CR_DATE AS DATE), 'HH24') - 
      DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 

trunc(some_date, 'HH24')が最も近い時間に切り捨てた日付を返しますしたいように聞こえます。あなたのクライアントはデフォルトで時刻コンポーネントを表示しないかもしれませんが、それはまだそこにあります。

with x as (
    select timestamp '2016-06-08 19:56:20.473' cr_date 
    from dual 
) 
select ROUND((TRUNC(CAST(CR_DATE AS DATE), 'HH24') - 
       DATE '1970-01-01') * 24 * 60 * 60, 0) AS creationDate 
    from x; 
+0

ありがとうございました...これは完璧に動作しています。 – RandomQuestions