Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyniki konwersji daty SQL na niepoprawny parametr modelu formatu liczb.

Przyczyna główna:

Konwertujesz NUMBER do STRING , zakładając, że jest to DATE . 20111010 to nie DATA, to NUMBER. Również '20111010' to nie DATE, to STRING. Są zupełnie inne.

  • 20111010 - LICZBA
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - DATA

Błąd:

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

Przechodząc do Twojego zapytania:

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

Niepotrzebnie komplikujesz konwersję i formatowanie.

TIMESTAMP datatype to rozszerzenie w dniu DATE typ danych. Oprócz elementów datetime typu DATE, typ danych TIMESTAMP przechowuje ułamki sekundy z dokładnością od 0 do 9 miejsc po przecinku, domyślnie 6.

Ponieważ masz do czynienia z TIMESTAMP możesz użyć TO_TIMESTAMP .

Podczas wykonywania arytmetyki DATE/TIMESTAMP , należy pozostawić typ danych bez zmian i nie konwertować go na ciąg . Musisz użyć TO_CHAR tylko do wyświetlania .

Zmodyfikuj predykat filtra jako:

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

Powyżej, :fromDate i :toDate powinien być ciągiem a nie liczba .

Na przykład

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

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

Lub użyj TO_CHAR do pierwszej konwersji liczba w ciąg :

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. ciąg połączenia java do obsługi funkcji Oracle TAF

  2. Typ tabeli w przykładzie procedury składowanej Oracle

  3. Oracle 11g - pętla FOR, która wstawia do tabeli tylko dni tygodnia?

  4. Kolumna niejednoznacznie zdefiniowana

  5. Jak wybrać unikalne wartości z tabeli?