根本原因:
NUMBERを変換しています STRING 、日付であると仮定します 。 20111010
は日付ではなく、数値です。また、'20111010'
は日付ではなく、文字列です。それらは完全に異なります。
-
20111010
-番号 -
'20111010'
- STRING -
TO_DATE('20111010','YYYYMMDD')
-日付
エラー:
SQL> SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual;
SELECT TO_CHAR(20111010, 'YYYY/MM/DD') FROM dual
*
ERROR at line 1:
ORA-01481: invalid number format model
質問に答える:
WHERE TO_DATE(TO_CHAR(CREATE_TIME, 'YYYY/MM/DD'), 'YYYY/MM/DD')
BETWEEN TO_DATE(TO_CHAR(:fromDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')
AND TO_DATE(TO_CHAR(:toDate, 'YYYY/MM/DD'), 'YYYY/MM/DD')
変換とフォーマットを不必要に複雑にしている。
タイムスタンプ データ型は日付の拡張です データ・タイプ。 DATEデータ型のdatetime要素に加えて、TIMESTAMPデータ型は、小数点以下0桁から9桁までの精度で秒の小数部を保持します。デフォルトは6です。
タイムスタンプを扱っているので TO_TIMESTAMPを使用できます 。
DATE/TIMESTAMP演算を実行している間 、データ型はそのままにして、文字列に変換しないでください。 。 TO_CHARを使用する必要があります 表示のみ 。
フィルタ述語を次のように変更します:
WHERE CREATE_TIME
BETWEEN TO_TIMESTAMP(:fromDate, 'YYYY/MM/DD')
AND TO_TIMESTAMP(:toDate, 'YYYY/MM/DD')
上記、:fromDate
および:toDate
文字列である必要があります 番号ではありません 。
たとえば、
SQL> SELECT to_timestamp('20111010', 'YYYYMMDD') FROM dual;
TO_TIMESTAMP('20111010','YYYYMMDD')
-----------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM
または、 TO_CHARを使用します 最初に変換する 番号 文字列に :
SQL> SELECT to_timestamp(TO_CHAR(20111010), 'YYYYMMDD') FROM dual;
TO_TIMESTAMP(TO_CHAR(20111010),'YYYYMMDD')
------------------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM