sql >> Databasteknik >  >> RDS >> Oracle

Resultat av SQL-datumkonvertering till ogiltig modellparameter för nummerformat.

Rootorsak:

Du konverterar ett NUMBER till STRING , förutsatt att det är DATE . 20111010 är inte ett DATUM, det är ett NUMMER. Även '20111010' är inte ett DATUM, det är ett STRING. De är helt olika.

  • 20111010 - NUMBER
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - DATE

Fel:

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

Kommer till din fråga:

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

Du komplicerar omvandlingen och formateringen i onödan.

TIMESTAMP datatype är ett tillägg på DATE data typ. Utöver datetime-elementen i DATE-datatypen, innehåller TIMESTAMP-datatypen bråkdelar av en sekund med en precision mellan 0 och 9 decimaler, standard är 6.

Eftersom du har att göra med TIMESTAMP du kan använda TO_TIMESTAMP .

När du gör en DATE/TIMESTAMP aritmetik , bör du lämna datatypen som den är och inte konvertera den till sträng . Du måste användaTO_CHAR endast för visning .

Ändra ditt filterpredikat som:

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

Ovan, :fromDate och :toDate ska vara en sträng och inte ett nummer .

Till exempel,

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

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

Eller använd TO_CHAR för att först konvertera numret till sträng :

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. Hur man kontrollerar om en tabell finns i ett givet schema

  2. PHP, SQL limit-fråga efter php-variabel

  3. Hur man ställer in ElasticSearch-indexstruktur med flera entitetsbindningar

  4. oracle diff:hur jämför man två tabeller?