Oracle
 sql >> Database >  >> RDS >> Oracle

La conversione della data SQL risulta in un parametro del modello di formato numerico non valido.

Causa principale:

Stai convertendo un NUMERO a STRING , supponendo che sia DATE . 20111010 non è una DATA, è un NUMERO. Inoltre, '20111010' non è una DATA, è una STRINGA. Sono completamente diversi.

  • 20111010 - NUMERO
  • '20111010' - STRINGA
  • TO_DATE('20111010','YYYYMMDD') - DATA

Errore:

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

Venendo alla tua domanda:

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

Stai complicando inutilmente la conversione e la formattazione.

Il TIMESTAMP datatype è un'estensione del DATE tipo di dati. Oltre agli elementi datetime del tipo di dati DATE, il tipo di dati TIMESTAMP contiene frazioni di secondo con una precisione compresa tra 0 e 9 cifre decimali, il valore predefinito è 6.

Dal momento che hai a che fare con TIMESTAMP potresti usare TO_TIMESTAMP .

Durante l'esecuzione di DATA/TIMESTAMP aritmetica , dovresti lasciare il tipo di dati così com'è e non convertirlo in string . Devi usareTO_CHAR solo per visualizzazione .

Modifica il predicato del filtro come:

WHERE CREATE_TIME 
BETWEEN TO_TIMESTAMP(:fromDate, 'YYYY/MM/DD') 
AND TO_TIMESTAMP(:toDate, 'YYYY/MM/DD')

Sopra, :fromDate e :toDate dovrebbe essere una stringa e non un numero .

Ad esempio,

SQL> SELECT to_timestamp('20111010', 'YYYYMMDD') FROM dual;

TO_TIMESTAMP('20111010','YYYYMMDD')
-----------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM

Oppure usa TO_CHAR per prima convertire il numero in stringa :

SQL> SELECT to_timestamp(TO_CHAR(20111010), 'YYYYMMDD') FROM dual;

TO_TIMESTAMP(TO_CHAR(20111010),'YYYYMMDD')
------------------------------------------------------------------
10-OCT-11 12.00.00.000000000 AM