sql >> Database teknologi >  >> RDS >> Oracle

sammenligne dato i sql kommando

Nej. Dato/tidsstempler har ikke noget format . Oracle gemmer ikke dato/tidsstempler i det format, du ser. Det format, du ser, er kun til visning formål. Datoen er internt gemt i 7 bytes, hvilket er Oracles proprietære format .

Selvfølgelig kunne du det. Du kan bruge TRUNC som afkorter tidsdelen og efterlader kun datodelen og datatypen som dato.

For eksempel,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

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

Så du får brugerinput i det format som en streng . Du skal først konvertere den til DATE ved hjælp af TO_DATE og derefter sammenligne det.

For eksempel,

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

Som jeg allerede har sagt, hvis du vil ignorere tidsdelen, skal du anvende TRUNC .

Anvendelse af TRUNC på dato kolonnen ville undertrykke ethvert almindeligt indeks på den kolonne. Ud fra et ydeevnesynspunkt er det bedre at bruge en datointervalbetingelse .

For eksempel,

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. Skift visningsformat for dato- og tidsfelt i MySQL PHP

  2. Sammenføj to tabeller, hvor tabel A har en datoværdi og skal finde den næste dato i B under datoen i A

  3. Få seneste 12 måneders data fra Db med år i Postgres

  4. MINUS i MySQL?