sql >> Database >  >> RDS >> Oracle

vergelijk datum in sql-opdracht

Nee. Datum/Tijdstempels heeft geen formaat . Oracle slaat de datum/tijdstempels niet op in het formaat dat u ziet. Het formaat dat u ziet, is alleen voor weergave doel. Datum wordt intern opgeslagen in 7 bytes, het eigen formaat van Oracle .

Natuurlijk zou je dat kunnen. Je zou TRUNC . kunnen gebruiken die het tijdgedeelte afkapt en alleen het datumgedeelte laat en het gegevenstype blijft als datum.

Bijvoorbeeld,

SQL> SELECT TRUNC(SYSTIMESTAMP) my_tmstmp FROM DUAL;

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

U krijgt dus de gebruikersinvoer in dat formaat als een tekenreeks . U moet eerst converteren het in DATE met behulp van TO_DATE en vergelijk het dan.

Bijvoorbeeld,

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

Zoals ik al zei, als je het tijdsgedeelte wilt negeren, pas dan TRUNC toe toe .

Echter, het toepassen van TRUNC op de datum kolom zou elke normale index onderdrukken op die kolom. Gebruik vanuit prestatieoogpunt beter een Datumbereikvoorwaarde .

Bijvoorbeeld,

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. SQL-syntaxisfout met substring en charindex

  2. oracle FOR LOOP herhaalt zich niet in SYS_REFCURSOR

  3. CSV-bestanden opslaan in mysql-database

  4. MySQL-waarschuwing:onjuiste tekenreekswaarde:'\x96'