31-DEC-95 není řetězec ani 20-JUN-94 . Jsou to čísla a na konci jsou přidány nějaké věci navíc. Mělo by to být '31-DEC-95' nebo '20-JUN-94' - všimněte si jednoduché uvozovky ' . To vám umožní provést porovnání řetězců.
Neprovádíte však porovnávání řetězců; provádíte porovnání dat . Měli byste přeměnit svůj řetězec na datum. Buď pomocí vestavěného TO_DATE() funkce nebo datový literál.
TO_DATE()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
Tato metoda má pár zbytečných úskalí
- Jak a_horse_with_no_name poznamenal v komentářích,
DEC, nemusí nutně znamenat prosinec. Záleží na vašemNLS_DATE_LANGUAGEaNLS_DATE_FORMATnastavení. Chcete-li zajistit, že vaše srovnání s prací v jakémkoli národním prostředí, můžete použít model formátu data a časuMMmísto toho - Rok '95 je nepřesný. Víte, že máte na mysli rok 1995, ale co kdyby to byl rok 50, je to rok 1950 nebo 2050? Vždy je lepší být explicitní
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
Datové literály
Datumový literál je součástí standardu ANSI, což znamená, že nemusíte používat specifickou funkci Oracle. Při použití doslovného musíte zadejte datum ve formátu YYYY-MM-DD a nemůžete zahrnout časový prvek.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Pamatujte, že datový typ Oracle obsahuje prvek času, takže datum bez časové části je ekvivalentní 1995-12-31 00:00:00 .
Pokud chcete zahrnout časovou část, budete muset použít literál časového razítka, který má formát YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
Další informace
NLS_DATE_LANGUAGE je odvozeno z NLS_LANGUAGE a NLS_DATE_FORMAT je odvozeno z NLS_TERRITORY . Ty se nastavují při prvním vytvoření databáze, ale lze je změnit změnou souboru s inicializačními parametry – pouze pokud je to skutečně nutné – nebo na úrovni relace pomocí ALTER SESSION syntax. Například:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
To znamená:
DDčíselný den v měsíci, 1 – 31MMčíselný měsíc v roce, 01 - 12 ( leden je 01 )YYYY4místný rok – podle mého názoru je to vždy lepší než dvoumístný rokYYprotože nedochází k záměně s tím, které století máte na mysli.HH24hodina dne, 0–23MIminuta v hodině, 0–59SSsekundu minuty, 0–59
Aktuální nastavení jazyka a data můžete zjistit dotazem V$NLS_PARAMETERSs a celý rozsah platných hodnot dotazem V$NLS_VALID_VALUES .
Další čtení
- Formátování modelů
Mimochodem, pokud chcete count(*) musíte seskupit podle employee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
Tím získáte počet za employee_id .