'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';