「日付」タイプのSQLフィールドに時間のみ(日付なし)を挿入する方法はありますか
私は挿入しようとしました:
13:00
と
01:00
と
13:00pm
と
01:00pm
しかし、エラーが発生し続けます:
Not A Valid Month
問題は文字通りです。日付/時刻値の場合、Oracle は ddMMMyyyy の形式の値を想定しています。(または、式を使用できますDATE '2001-01-01
。リテラル値については、こちらで説明しています。) 日付のない時間の既定の形式はないようです。
つまり、 で同じエラーが発生する可能性がありますcast('1/1/2001' as date)
。
代わりに、次のto_date()
関数を使用します。
select to_date('10:00', 'hh:mi')
from dual
これにより、フォーマットの柔軟性が大幅に向上します。
また、Ben がコメントで指摘しているように、これにより現在の日付と時刻が指定されます。
EXTRACT と SYSDATE の時刻のみの部分と日付の使用例...:
SELECT hh||':'||mi||':'||ss time_only_portion
FROM
(
Select
EXTRACT(hour From Cast(SYSDATE as timestamp)) hh,
EXTRACT(minute From Cast(SYSDATE as timestamp)) mi,
EXTRACT(second From Cast(SYSDATE as timestamp)) ss
From dual
)
/
SELECT EXTRACT(HOUR From t_stamp) hh
FROM
(
SELECT CAST(to_date('21/02/2012 06:10:00 am', 'dd/mm/yyyy hh:mi:ss am') AS TIMESTAMP) t_stamp
FROM dual
)
/