Oracle
 sql >> база данни >  >> RDS >> Oracle

Преобразуването на SQL дата води до невалиден параметър на модела на числов формат.

Първопричина:

Преобразувате NUMBER до STRING , като приемем, че е ДАТА . 20111010 не е ДАТА, а ЧИСЛО. Освен това, '20111010' не е ДАТА, а STRING. Те са напълно различни.

  • 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')

Вие ненужно усложнявате конвертирането и форматирането.

TIMESTAMP datatype е разширение на ДАТА тип данни. В допълнение към елементите за дата и час от типа данни DATE, типът данни TIMESTAMP съдържа части от секундата с точност между 0 и 9 знака след десетичната запетая, като по подразбиране е 6.

Тъй като имате работа с TIMESTAMP можете да използвате TO_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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JNDI източник на данни към oracle с grails 1.3

  2. Как да използвате rownum

  3. Как да върнете Unix Timestamp в Oracle

  4. Oracle Ace Промени

  5. Декларирайте динамичен масив в Oracle PL/SQL