Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zapytanie SQL z użyciem dwóch dat

'10-MAY-20' to nie data, to ciąg znaków. Data nie ma żadnego formatu, w oparciu o ustawienia NLS specyficzne dla danego regionu jest wyświetlana w formacie czytelnym dla człowieka przy użyciu TO_CHAR i odpowiednią maskę formatu.

Należy również unikać dwucyfrowego YY reprezentacja na rok, to cały powód Y2K błąd się zaczął. Zawsze używaj YYYY format.

Aby przekonwertować ciąg na datę:

Użyj TO_DATE i odpowiednia maska ​​formatu:

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

Lub użyj ANSI date literal który używa stałego formatu 'YYYY-MM-DD' :

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

Kolejna rzecz, DATE jest słowem zastrzeżonym Oracle, możesz zobaczyć dokumentację . Być może używasz identyfikatora cytowanego "date" tj. używając podwójnych cudzysłowów wokół słowa zastrzeżonego.

Dzieje się tak prawdopodobnie dlatego, że ustawienia NLS programu SQL Developer są ustawione na 'DD-MON-YY' , więc po przekazaniu daty w tym formacie następuje niejawna konwersja do daty. Jeśli jednak zmienisz format, to nie zadziała:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Problem z uruchomieniem Proc - Oracle PL/SQL

  2. Dlaczego Oracle działa tak wolno, gdy przekazuję java.sql.Timestamp dla kolumny DATE?

  3. Modelowanie relacji jeden do stałej

  4. Pobierz ostatni rekord zestawu wyników

  5. Najpopularniejsze zapytania dotyczące klucza podstawowego w Oracle z przykładami