sql >> Databasteknik >  >> RDS >> Oracle

jämför datum i kommandot sql

Nej. Datum/tidsstämplar har inget format . Oracle lagrar inte datum-/tidsstämplarna i det format du ser. Formatet du ser är endast för visning ändamål. Datum lagras internt i 7 byte vilket är Oracles proprietära format .

Klart man kunde. Du kan använda TRUNC som avkortar tidsdelen och lämnar endast datumdel och datatyp kvar som datum.

Till exempel,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

MY_TMSTMP
----------
2015-05-29

Så du får användarinmatningen i det formatet som en sträng . Du måste först konvertera den till DATE med TO_DATE och jämför det sedan.

Till exempel,

WHERE TRUNC(dt_column) < TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')

Som jag redan sa, om du vill ignorera tidsdelen, använd TRUNC .

Använder dock TRUNC på datum kolumnen skulle undertrycka alla vanliga index på den kolumnen. Ur prestandasynpunkt är det bättre att använda ett datumintervallvillkor .

Till exempel,

WHERE dt_column
BETWEEN 
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS')
AND     
        TO_DATE('05/29/2015 12:07:58', 'MM/DD/YYYY HH24:MI:SS') +1


  1. Hämta SQL-frågeresultatet utan tabellformatet

  2. Oracle 11g Replication - Använder uppdatering vid commit med fjärrdatabas (databaslänkar)

  3. Globalt icke-partitionerat index i Oracle

  4. fel -1054 okänd kolumn e.id i ordningsklausul