タイムスタンプ変数があるとしましょう:
select timestamp '2011-02-24 08:30:42 +06:00' from dual;
それを次のように「切り捨てる」方法はありますか
'2011-02-24 08:00:00 +06:00'
(分と秒をカットしましたが、タイムゾーンは残しました)
ターゲットのオラクルのバージョンは 11g r2 です
タイムスタンプ変数があるとしましょう:
select timestamp '2011-02-24 08:30:42 +06:00' from dual;
それを次のように「切り捨てる」方法はありますか
'2011-02-24 08:00:00 +06:00'
(分と秒をカットしましたが、タイムゾーンは残しました)
ターゲットのオラクルのバージョンは 11g r2 です
SQL> select to_timestamp_tz(to_char(timestamp '2011-02-24 08:30:42 +06:00', 'YYYY-MM-DD HH24 TZH:TZM'), 'YYYY-MM-DD HH24 TZH:TZM') from dual;
TO_TIMESTAMP_TZ(TO_CHAR(TIMESTAMP'2011-02-2408:30:42+06:00','YYYY-MM-DDTZH:
---------------------------------------------------------------------------
24.02.2011 8:00:00,000000000 +06:00
私はそれを使用して動作させました:
SELECT TO_TIMESTAMP_TZ(TO_CHAR(timestamp '2011-02-24 08:30:42 +06:00', 'YYYY-MM-DD HH24') || ':00:00 '|| TO_CHAR(timestamp '2011-02-24 08:30:42 +06:00', 'TZH:TZM'), 'YYYY-MM-DD HH24:MI:SS TZH:TZM')
FROM DUAL
TRUNCはタイムスタンプ 9.2.0.3+をサポートしていますが、10g Express Edition での私のテストでは、これが
SELECT TRUNC(timestamp '2011-02-24 08:30:42 +06:00', 'HH')
FROM DUAL
...時間と午前/午後を完全に台無しにしました。リテラルの場合、または TO_TIMESTAMP_TZ 内で提供された場合は問題ありませんでした。10gR2 の TRUNC(date) のドキュメントには、「date に別の日時データ型を指定した場合でも、返される値は常にデータ型 DATE です。」と記載されています。
試すselect cast(timestamp as date) from dual