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

SQL-forespørgsel med to datoer

'10-MAY-20' er ikke en dato, det er en snor. En dato har ikke noget format, baseret på dine lokalitetsspecifikke NLS-indstillinger vises den i et menneskeligt læsbart format ved hjælp af TO_CHAR og korrekt formatmaske.

Du bør også undgå at bruge tocifret YY repræsentation for år, det er hele grunden til Y2K fejl startet. Brug altid YYYY format.

Sådan konverteres en streng til dato:

Brug TO_DATE og passende formatmaske:

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

Eller brug ANSI date literal som bruger fast format 'YYYY-MM-DD' :

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

En anden ting, DATE er et Oracle reserveret ord, kan du se dokumentationen . Måske bruger du anført id "date" dvs. at bruge dobbelte anførselstegn omkring det reserverede ord.

Det er sandsynligvis fordi dine NLS-indstillinger for SQL Developer er indstillet til 'DD-MON-YY' , så når du passerer datoen i det format, foretager det en implicit konvertering til dato. Men hvis du ændrer formatet, virker det ikke:

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


  1. Sql dato og klokkeslæt sammenligning fra dobbelt tabel

  2. Adgang til sidst oprettede række i PHP/MySQL

  3. Hvordan kan jeg fjerne disse (â?²s) type tegn med PHP?

  4. DSN-fri forbindelse til mysql-server i ms-access husker ikke brugernavn og adgangskode