sql >> Databáze >  >> RDS >> Oracle

SQL dotaz pomocí dvou dat

'10-MAY-20' není datum, je to řetězec. Datum nemá žádný formát, na základě vašeho národního nastavení NLS se zobrazuje ve formátu čitelném pro člověka pomocí TO_CHAR a masku správného formátu.

Také byste se neměli používat dvoumístné YY zastoupení za rok, to je celý důvod Y2K chyba začala. Vždy používejte YYYY formát.

Chcete-li převést řetězec na datum:

Použijte TO_DATE a masku vhodného formátu:

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

Nebo použijte ANSI date literal který používá pevný formát 'YYYY-MM-DD' :

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

Další věc, DATE je vyhrazené slovo Oracle, můžete si prohlédnout dokumentaci . Možná používáte uvedený identifikátor "date" tj. pomocí dvojitých uvozovek kolem vyhrazeného slova.

Je to pravděpodobně proto, že vaše nastavení NLS SQL Developer je nastaveno na 'DD-MON-YY' , takže když předáte datum v tomto formátu, provede se implicitní převod na datum. Pokud však změníte formát, nebude to fungovat:

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


  1. DATEDIFF() vrací nesprávné výsledky na serveru SQL? Přečti si tohle.

  2. Jak získat hodnotu z posledního vloženého řádku?

  3. Nakonfigurujte poštovní server pro práci s PHP

  4. Dotaz MySQL:Dotaz na všechny položky starší než 1 rok