Oracle verwenden, WIE '%' DATUM
Meinem Tisch myTab
hat die Spalte startDate
, die den Datentyp "DATUM". Die Daten in dieser Spalte gespeichert werden, wie dd.mm.yyyy
.
Jetzt versuche ich die Daten mit dieser Abfrage:
SELECT * FROM myTab WHERE startDate like '%01.2015"
Irgendwie funktioniert es nicht und ich weiß nicht, warum.
Hoffe mir kann jemand helfen.
Wenn Sie möchten, dass alle Zeilen im Januar 2015 nutzen
Haben Sie einen Blick auf Oracle SQL-Vergleich der Termine gibt Falsches Ergebnis
where to_char(startDate ,'Mon-YYYY')='Jan-2015';
Haben Sie einen Blick auf Oracle SQL-Vergleich der Termine gibt Falsches Ergebnis
InformationsquelleAutor Mihawk | 2015-10-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen eine text-Suche auf dem Datum, das Sie konvertieren müsste das Datum zu text.
Es ist effizienter, wenn Sie berechnen Sie die erste und Letzte Datum, für das, was Sie wollen zu finden und alles bekommen, was zwischen Ihnen. So es ist getan, die als numerische Vergleiche anstelle eines text-pattern-match -, und es kann Gebrauch machen von einem index, wenn es einer ist:
B*Tree index
(wenn überhaupt).Guter Punkt.
"so ist es einem einfachen numerischen Vergleich anstelle eines text-pattern match" Nein, das ist nicht wahr, es ist überhaupt nicht ein numerischer Vergleich. In Oracle, DATUM und ANZAHL sind völlig unterschiedlich.'
Korrigiert habe ich die Antwort.
Ich weiß es zu schätzen. Aber, bitte ersetzen Sie "numerischer Vergleich" mit "date-Vergleich", wie es sinnvoller ist. Datum unterscheidet sich von numeric(Zahl in oracle).
InformationsquelleAutor Guffa
kann ich demütig schlage vor, Sie entspannen Ihren Ton ein bisschen? Diese Antwort ist nicht "völlig falsch", es ist einfach nicht die beste. In der Tat, diese Antwort Arbeit, obwohl es gibt viel, viel bessere Möglichkeiten, die Lösung des Problems, und nicht nicht, in der Tat, verlassen sich auf implizite Datentyp-Konvertierung.
fair genug 🙂
InformationsquelleAutor tib
Wenn der Feldtyp ist "DATUM", dann den Wert nicht als string gespeichert, es ist eine Zahl, verwaltet von Oracle, so haben Sie es in einen string konvertieren:
Können Sie auch Datumsbereiche in SQL-Abfragen:
to_char() ist explizit: "docs.oracle.com/cd/E11882_01/server.112/e41084/...
InformationsquelleAutor mbk
Bezug auf tatsächliche Frage "Irgendwie funktioniert es nicht und ich weiß nicht, warum."
Oracle stellen eine implizite Konvertierung von
DATE
zuVARHCAR2
aber es verwendet die Standard -NLS_DATE_FORMAT
die ist wahrscheinlich anders als das, was Sie in Ihrer Abfrage verwenden.InformationsquelleAutor Wernfried Domscheit
Oracle nicht speichern Datum in dem format, das Sie sehen. Er speichert diese intern in einem proprietären format in 7 bytes mit jedem byte die Speicherung von verschiedenen Komponenten des datetime-Wert.
Du vergleichst ein DATUM mit einem STRING, das ist sinnlos.
Vom performance-Sicht, sollten Sie eine Datumsbereich Zustand, so dass, wenn es irgendeine regelmäßige INDEX auf die Spalte Datum, es würde verwendet werden.
Verstehen, warum eine Datumsbereich Zustand ist besser in Bezug auf Leistung, haben Sie einen Blick auf meine Antwort hier.
InformationsquelleAutor Lalit Kumar B
Ich löste mein problem auf diese Weise. Danke für Vorschläge für Verbesserungen. Beispiel in C#.
InformationsquelleAutor Eronildo Barbosa
Liefern eine detaillierte Antwort und die Adresse dieses https://stackoverflow.com/a/42429550/1267661 Antwort Thema.
In Oracle eine Spalte vom Datentyp "Datum" wird nicht eine Zahl noch ein string, ist es ein "datetime" - Wert mit Jahr, Monat, Tag, Stunde, minute und Sekunden.
Die Standard-Zeit ist immer Mitternacht "00:00:00"
Abfrage:
funktioniert nicht in allen Umständen, denn eine date-Spalte nicht eine Zeichenfolge, die mit "wie" zwingt Oracle zu tun, die eine Konvertierung von Datum-Wert-zu-string-Wert.
Der string-Wert kann Jahr-Monat-Tag-Zeit "oder" Monat-Tag-Jahr-Zeit oder Tag-Monat-Jahr-an der Zeit, dass alle hängt davon ab, wie eine bestimmte Oracle-Instanz gesetzt hat, die parameter NLS_DATE_FORMAT zeigen Daten, die als strings.
Den richtigen Weg, um alle die Möglichkeit mal an einem Tag ist:
InformationsquelleAutor alvalongo