sql >> Databáze >  >> RDS >> Oracle

Výsledky konverze data SQL na neplatný parametr modelu formátu čísla.

Kořenová příčina:

Převádíte NUMBER do STRING , za předpokladu, že je DATE . 20111010 není DATE, je to ČÍSLO. Také '20111010' není DATE, je to STRING. Jsou úplně jiné.

  • 20111010NUMBER
  • '20111010'STRING
  • TO_DATE('20111010','YYYYMMDD')DATUM

Chyba:

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

Přecházíme k vašemu dotazu:

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

Zbytečně komplikujete převod a formátování.

TIMESTAMP datový typ je rozšíření na DATE datový typ. Kromě prvků datetime datového typu DATE obsahuje datový typ TIMESTAMP zlomky sekundy s přesností mezi 0 a 9 desetinnými místy, výchozí hodnota je 6.

Protože máte co do činění s TIMESTAMP můžete použít TO_TIMESTAMP .

Při provádění aritmetiky DATE/TIMESTAMP , měli byste ponechat datový typ tak, jak je, a nepřevádět jej na řetězec . Musíte použít TO_CHAR pouze pro zobrazení .

Upravte predikát filtru jako:

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

Výše :fromDate a :toDate by měl být řetězec a nikoli číslo .

Například,

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

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

Nebo použijte TO_CHAR nejprve převést číslo do řetězce :

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. utf-8 vs latin1

  2. Vylepšení Service Broker v SQL Server 2016

  3. Jak mohu bezpečně předat sekvenci primárních klíčů v Django?

  4. Databáze SQLite poskytuje varovný automatický index na <název_tabulky> (sloupec) Po upgradu systému Android L