31-DEC-95ist keine Zeichenfolge, noch ist 20-JUN-94. Es sind Zahlen mit ein paar zusätzlichen Dingen am Ende. Dies sollte sein '31-DEC-95'oder '20-JUN-94'- beachten Sie das einfache Anführungszeichen , '. Auf diese Weise können Sie einen Zeichenfolgenvergleich durchführen.
Sie führen jedoch keinen Zeichenfolgenvergleich durch. Sie führen einen Datumsvergleich durch . Sie sollten Ihre Zeichenfolge in ein Datum umwandeln. Entweder mithilfe der integrierten TO_DATE()Funktion oder eines Datumsliteral .
MITEINANDER AUSGEHEN()
select employee_id
from employee
where employee_date_hired > to_date('31-DEC-95','DD-MON-YY')
Diese Methode weist einige unnötige Fallstricke auf
- Wie a_horse_with_no_name in den Kommentaren vermerkt
DEC, bedeutet dies nicht unbedingt Dezember. Es hängt von Ihren NLS_DATE_LANGUAGEund NLS_DATE_FORMATEinstellungen ab. Um sicherzustellen, dass Ihr Vergleich mit der Arbeit in einem beliebigen Gebietsschema funktioniert, können Sie stattdessen das Datums- / Uhrzeitformatmodell MM verwenden
- Das Jahr '95 ist ungenau. Sie wissen, Sie meinen 1995, aber was ist, wenn es '50 war, ist das 1950 oder 2050? Es ist immer am besten, explizit zu sein
select employee_id
from employee
where employee_date_hired > to_date('31-12-1995','DD-MM-YYYY')
Datumsliterale
Ein Datumsliteral ist Teil des ANSI-Standards, dh Sie müssen keine Oracle-spezifische Funktion verwenden. Wenn Sie ein Literal verwenden, müssen Sie Ihr Datum im Format angeben YYYY-MM-DDund dürfen kein Zeitelement einfügen.
select employee_id
from employee
where employee_date_hired > date '1995-12-31'
Beachten Sie, dass der Oracle-Datumsdatentyp ein Zeitelement enthält, sodass das Datum ohne Zeitanteil gleich ist 1995-12-31 00:00:00.
Wenn Sie einen Zeitabschnitt einschließen möchten, müssen Sie ein Zeitstempelliteral verwenden, das das Format annimmt YYYY-MM-DD HH24:MI:SS[.FF0-9]
select employee_id
from employee
where employee_date_hired > timestamp '1995-12-31 12:31:02'
Weitere Informationen
NLS_DATE_LANGUAGEwird abgeleitet von NLS_LANGUAGEund NLS_DATE_FORMATwird abgeleitet von NLS_TERRITORY. Diese werden beim erstmaligen Erstellen der Datenbank festgelegt. Sie können jedoch geändert werden, indem Sie Ihre Initialisierungsparameterdatei ändern - nur wenn dies wirklich erforderlich ist - oder auf Sitzungsebene mithilfe der ALTER SESSIONSyntax. Zum Beispiel:
alter session set nls_date_format = 'DD.MM.YYYY HH24:MI:SS';
Das heisst:
DD numerischer Tag des Monats, 1 - 31
MM numerischer Monat des Jahres, 01 - 12 (Januar ist 01)
YYYY4-stelliges Jahr - meiner Meinung nach ist dies immer besser als ein 2-stelliges Jahr, YYda es keine Verwechslung mit dem Jahrhundert gibt, auf das Sie sich beziehen.
HH24 Stunde des Tages, 0 - 23
MI Minute der Stunde, 0 - 59
SS Sekunde der Minute, 0-59
Sie können Ihre aktuellen Sprach- und Datumsspracheneinstellungen durch Abfragen V$NLS_PARAMETERSsund die gesamte Bandbreite gültiger Werte durch Abfragen ermitteln V$NLS_VALID_VALUES.
Weiterführende Literatur
Übrigens, wenn Sie das wollen count(*) , müssen Sie nach gruppierenemployee_id
select employee_id, count(*)
from employee
where employee_date_hired > date '1995-12-31'
group by employee_id
Dies gibt Ihnen die Anzahl pro employee_id .
> <oderBETWEEN '' AND ''