Ich versuche, die Anzahl der Mitarbeiter anzuzeigen, die nach dem 20. Juni 1994 eingestellt wurden. Es wird jedoch die Fehlermeldung "JUN 'ungültige Kennung" angezeigt. Bitte helfen Sie, danke!
Select employee_id, count(*)
From Employee
Where to_char(employee_date_hired, 'DD-MON-YY') > 31-DEC-95;
> <
oderBETWEEN '' AND ''
Antworten:
31-DEC-95
ist keine Zeichenfolge, noch ist20-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()
Diese Methode weist einige unnötige Fallstricke auf
DEC
, bedeutet dies nicht unbedingt Dezember. Es hängt von IhrenNLS_DATE_LANGUAGE
undNLS_DATE_FORMAT
Einstellungen ab. Um sicherzustellen, dass Ihr Vergleich mit der Arbeit in einem beliebigen Gebietsschema funktioniert, können Sie stattdessen das Datums- / UhrzeitformatmodellMM
verwendenDatumsliterale
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-DD
und dürfen kein Zeitelement einfügen.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]
Weitere Informationen
NLS_DATE_LANGUAGE
wird abgeleitet vonNLS_LANGUAGE
undNLS_DATE_FORMAT
wird abgeleitet vonNLS_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 derALTER SESSION
Syntax. Zum Beispiel:Das heisst:
DD
numerischer Tag des Monats, 1 - 31MM
numerischer Monat des Jahres, 01 - 12 (Januar ist 01)YYYY
4-stelliges Jahr - meiner Meinung nach ist dies immer besser als ein 2-stelliges Jahr,YY
da es keine Verwechslung mit dem Jahrhundert gibt, auf das Sie sich beziehen.HH24
Stunde des Tages, 0 - 23MI
Minute der Stunde, 0 - 59SS
Sekunde der Minute, 0-59Sie können Ihre aktuellen Sprach- und Datumsspracheneinstellungen durch Abfragen
V$NLS_PARAMETERSs
und die gesamte Bandbreite gültiger Werte durch Abfragen ermittelnV$NLS_VALID_VALUES
.Weiterführende Literatur
Übrigens, wenn Sie das wollen
count(*)
, müssen Sie nach gruppierenemployee_id
Dies gibt Ihnen die Anzahl pro
employee_id
.quelle
DEC
ist nicht unbedingt immer ein gültiger Monat. Es ist normalerweise besser, Zahlen anstelle von Namen zu verwendentimestamp
Literal anstelle einesdate
Literal angeben :timestamp '2015-01-30 19:42:04'
(da in ANSI SQL a derdate
Datentyp keine Zeit hat, nur dertimestamp
Datentyp).DATE 2016-04-01
Mittel2016-04-01 00:00:00
wirklich. Und ich denke, diese Syntax funktioniert seit Oracle 9i, da hier die ANSI-SQL-Syntax in Oracle eingeführt wurde.define
ist ein SQL * Plus-Befehl, der alles, was Sie definiert haben, durch alle Substitutionsvariablen mit diesem Namen ersetzt .ALTER SESSION
ist eine Anweisung, mit der Sie einige Datenbankparameter oder -einstellungen für die Dauer dieser Sitzung ändern könnenFazit,
to_char
arbeitet auf seine eigene WeiseSo,
Verwenden Sie zum Vergleich immer dieses Format JJJJ-MM-TT anstelle von MM-TT-JJ oder TT-MM-JJJJ oder einem anderen Format
quelle
Sie können trunc und to_date wie folgt verwenden:
quelle
aus Ihrer Anfrage:
Ich denke, es ist nicht die Anzahl der Mitarbeiter anzuzeigen, die nach dem 20. Juni 1994 eingestellt werden. Wenn Sie die Anzahl der Mitarbeiter anzeigen möchten, können Sie verwenden:
Ich denke, für bewährte Methoden zum Vergleichen von Daten können Sie Folgendes verwenden:
quelle
Ein einfaches Anführungszeichen muss vorhanden sein, da das Datum in ein Zeichen umgewandelt wurde.
quelle