sql >> Database >  >> RDS >> Oracle

Resultaten van SQL-datumconversie naar ongeldige modelparameter voor getalnotatie.

Hoofdoorzaak:

U converteert een NUMBER naar STRING , ervan uitgaande dat het DATE is . 20111010 is geen DATUM, het is een NUMMER. Ook '20111010' is geen DATUM, het is een STRING. Ze zijn compleet anders.

  • 20111010 - NUMMER
  • '20111010' - STRING
  • TO_DATE('20111010','YYYYMMDD') - DATUM

Fout:

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

Komt op uw vraag:

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

U maakt de conversie en opmaak onnodig ingewikkeld.

De TIMESTAMP datatype is een extensie op de DATE data type. Naast de datetime-elementen van het datatype DATE, bevat het datatype TIMESTAMP fracties van een seconde tot een precisie tussen 0 en 9 decimalen, waarbij de standaardwaarde 6 is.

Aangezien je te maken hebt met TIMESTAMP je zou TO_TIMESTAMP . kunnen gebruiken .

Tijdens een DATE/TIMESTAMP-berekening , moet u het gegevenstype laten zoals het is en het niet converteren naar string . U moetTO_CHAR . gebruiken alleen voor weergave .

Wijzig uw filterpredikaat als:

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

Hierboven, :fromDate en :toDate moet een tekenreeks . zijn en niet een nummer .

Bijvoorbeeld,

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

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

Of gebruik TO_CHAR eerst converteren het nummer in tekenreeks :

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. Vreemd probleem met mysqli_stmt_bind_result

  2. SQL:alleen de eerste letter met een hoofdletter

  3. Array splitsen in kleinere arrays op basis van de waarde van de sleutel?

  4. Wat is MySQL's wait_timeout, net_read_timeout en net_write_timeout variabele?