sql >> Databasteknik >  >> RDS >> Oracle

SQL-fråga med två datum

'10-MAY-20' är inte ett datum, det är ett snöre. Ett datum har inget format, baserat på dina lokalspecifika NLS-inställningar visas det i ett läsbart format med TO_CHAR och rätt formatmask.

Du bör också undvika att använda tvåsiffriga YY representation för år, det är hela anledningen till Y2K buggen startade. Använd alltid YYYY format.

Så här konverterar du en sträng till datum:

Använd TO_DATE och lämplig formatmask:

where  date_col > TO_DATE('10-MAY-2020', 'DD-MON-YYYY')  
and    date_col < TO_DATE('13-MAY-2020', 'DD-MON-YYYY')

Eller använd ANSI date literal som använder fast format 'YYYY-MM-DD' :

where  date_col > DATE '2020-05-10' and date < DATE '2020-05-13'

En annan sak, DATE är ett reserverat ord i Oracle kan du se dokumentationen . Du kanske använder citattecken "date" d.v.s. att använda dubbla citattecken runt det reserverade ordet.

Det beror förmodligen på att dina NLS-inställningar för SQL Developer är inställda på 'DD-MON-YY' , så när du passerar datumet i det formatet gör det en implicit konvertering till datum. Men om du ändrar formatet kommer det inte att fungera:

alter session set NLS_DATE_FORMAT = 'YYYY-MM-DD';


  1. Rails/Postgresql SQL-skillnader med datum

  2. Hur man utför redigering i junction table

  3. Anslut till MSSQL-databasen med Flask-SQLAlchemy

  4. Hur man upptäcker 4byte UTF8-tecken i Oracle