Was ist die Oracle Standard-Datum-Format?
Ich habe eine Oracle-DB, und ich glaube nicht das Datum-format. Ich will wissen, was das Datum-format ist, um sicherzustellen, dass Suchanfragen wie
select * from search where search_date>='03/16/2016 00:00:00'
Arbeit als erwartet.
InformationsquelleAutor entpnerd | 2016-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun Sie das nicht - Sie verlassen sich auf die implizite Datentypkonvertierung ist zu Versagen irgendwann.
Haben Sie zwei Möglichkeiten:
1) Verwenden Sie ein geeignetes ANSI SQL Datum-literal:
2) verwenden
to_date()
(oderto_timestamp()
) und verwenden Sie ein benutzerdefiniertes format.Mit
to_date()
Sie sollten vermeiden, irgendwelche format, das von der Sprache ab. Verwenden Sie die zahlen für den Monat, keine Abkürzungen (z.B.'Mar'
oder'Apr'
), weil Sie wieder verlassen sich auf die client Sprache.Weitere details können im Handbuch gefunden werden:
https://docs.oracle.com/cd/E11882_01/server.112/e41084/sql_elements003.htm#SQLRF51062
Nie beruhen auf impliziten Datentyp-Konvertierung.
to_date
- Funktion, wie es ist, eine Abfrage zunächst fürNLS_DATE_FORMAT
und führen Sie dann das faul-Abfrage.Das Datum im format kann ändern, auch in einer "monolithischen data warehouse", weil es ist definiert durch das client, nicht der server (ein client mit einem englischen Betriebssystem, ein anderes Datum-format, dann mit z.B. einem deutschen Betriebssystem). Wenn Sie in der Regel vergessen, das Datum-format, dann kleben die ANSI-format - es ist die kürzeste form und wird immer funktionieren-unabhängig von einem (expliziten oder impliziten) NLS-Einstellungen.
Sie müssen verstehen, dass ein DATE-oder TIMESTAMP-Spalte gespeichert ist, in einem internen, binären format. Was Sie sehen, sind die angezeigten -, Zeichen-Darstellung. Und das wird gesteuert durch die Einstellung von NLS_DATE_FORMAT, die gesetzt werden können, auf verschiedenen Ebenen, von denen die meisten Sie haben keine Kontrolle über. Ich habe einen Artikel mit Details zu dieser in edstevensdba.com/oracle-data-types/...
Nur ein Hinweis, wenn Daten Art der
SEARCH_DATE
istDATE
dann sind Sie do eine implizite Datenkonvertierung, wenn Sie vergleichen mitTIMESTAMP
Wert - das sollte vermieden werden, durch Ihre eigenen Worte.InformationsquelleAutor a_horse_with_no_name
Können Sie die
NLS
session-Parameter mit der Abfrage:oder, wenn Sie die Berechtigungen haben
GRANT SELECT ON V_$PARAMETER TO YOUR_USERNAME;
, können Sie den Befehl verwenden:Wenn Sie wollen einfach nur das Datum-format, dann können Sie entweder:
oder
Allerdings könnte man auch ANSI-Datum (timestamp) Literale, die format-agnostisch. Eine ANSI-Datum-literal hat die Form
DATE 'YYYY-MM-DD'
- und ein timestamp-literal hat die FormTIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF9'
. Also deine Abfrage wäre:oder
Verlassen Sie sich nicht auf die Standard-Datum-format konsequent, wie es ist, eine session-parameter Einstellung durch den Benutzer der client (nicht der server) - was bedeutet, dass jeder Benutzer können den Wert in Ihrer eigenen Sitzung, so können zwei Benutzer unterschiedliche Werte haben oder, auch dass ein Benutzer verschiedene Werte in verschiedenen Sitzungen - dies gilt insbesondere in internationalen Organisationen, in denen der client standardmäßig wird davon abhängen, auf dem Territorium/Sprache Vorgaben des Kunden. Entweder verwenden Sie ein Datum/timestamp-literal oder verwenden
TO_DATE
mit einem expliziten format-Modell.InformationsquelleAutor MT0
Einen DATUM haben kein format. Oracle speichert keine Daten in dem format, das Sie sehen. Er speichert Sie intern in 7 bytes mit jedem byte die Speicherung von verschiedenen Komponenten des datetime Wert.
Anzeigen, verwenden TO_CHAR mit der richtigen FORMAT MODELL.
Für den Vergleich verwenden TO_DATE mit der richtigen FORMAT MODELL.
Was Sie sehen, wie ein format von Standard, ist Ihre Gebietsschema-spezifische NLS-Einstellungen.
Du vergleichst ein DATUM mit einem string literal. Immer, explizit konvertieren Sie die Zeichenfolge in Datum mit TO_DATE und das richtige format Maske.
Oder, wenn Sie den Umgang nur mit der date-Teil und nicht um das Teil, dann verwenden Sie die ANSI-Datum-literal was nutzt ein festes format
DATE 'YYYY-MM-DD'
Könnten Sie nur sein Glück, um eine Ausgabe aufgrund einer implizite Datentyp Konvertierung basierend auf Ihrem Gebietsschema-spezifische NLS-Einstellungen. Niemals verlassen Sie sich auf implizite Datentyp Konvertierung, es könnte für Sie arbeiten, vielleicht nicht für andere, wo die nls-Einstellungen unterschiedlich sind.
SELECT DUMP(date_column) FROM table_name
) und Typ 13 hat 8 Byte (SELECT DUMP(SYSDATE) FROM DUAL
).Das sind die zwei Typen nicht-Formaten. Formatieren bedeutet nicht, dass die interne byte-Darstellung. Insbesondere für den OP-wer übernimmt die Anzeige das Datums-format.
Ok, ersetzen Sie "Formate" mit "Datenstrukturen" in meinem vorherigen Kommentar. Jedoch, der Punkt steht noch, dass Sie Ihre ersten Abschnitt auf die byte-Struktur der Daten ist nur die halbe Geschichte, denn es ist eine 8-byte-Struktur, die auch für Daten verwendet.
Für die Speicherung der Daten in Tabelle 7 bytes genug sind. Das 8. byte ist für die interne DATUM Funktionen wie DATEPART-oder extern, wo Sie brauchen, um TO_DATE verwenden, um zu konvertieren. Dieses Thema ist zum speichern von Daten, so , wenn Sie ein Datum speichern in der Tabelle, nehmen die Müllkippe und zu sehen wird es sein, Len=7, auch wenn Sie mit der DATEPART-oder TO_DATE beim einfügen von.
href="http://stackoverflow.com/a/36059638/3989608">stackoverflow.com/a/36059638/3989608
InformationsquelleAutor Lalit Kumar B