Oracle-SQL convert date format DD-Mon-YY zu YYYYMM
Habe ich eine zum vergleichen von Daten in 2 Tabellen, aber das problem ist, dass eine Tabelle das Datum in DD-Mon-YY-format und die andere im format YYYYMM.
Ich brauche, um beide YYYYMM für den Vergleich.
Ich brauche, um etwas zu schaffen, wie diese:
SELECT * FROM offers
WHERE offer_date = (SELECT to_date(create_date, 'YYYYMM') FROM customers where id = '12345678')
AND offer_rate > 0
wo create_date ist so etwas wie 12-Mar-2006 und offer_date ist so etwas wie 200605
Irgendwelche Ideen, wo ich anpassen müssen, um diese Abfrage??
Warum haben Sie ein problem? Ist offer_date eine
Termine nicht haben Formate wie die. Wenn Sie möchten, dass das format, Sie wollen einen string per definition. So sind Sie auf der Suche nach strings (mit diesem format) oder DATETIMEs (was nicht ein format haben). Und so, wenn die Felder "unterschiedliche Formate", was sind Ihre tatsächlichen Daten-Typen? DATETIMEs, ein VHARCHAR()s, etc?
offer_date ist ein ZAHL-Feld
zusätzlich zu den oben genannten Kommentar, create_date ist ein DATE-Feld
Es wäre besser, wenn Sie könnte konvertieren der Datentypen für Datum-Spalten zu
VARCHAR2
(string)?Termine nicht haben Formate wie die. Wenn Sie möchten, dass das format, Sie wollen einen string per definition. So sind Sie auf der Suche nach strings (mit diesem format) oder DATETIMEs (was nicht ein format haben). Und so, wenn die Felder "unterschiedliche Formate", was sind Ihre tatsächlichen Daten-Typen? DATETIMEs, ein VHARCHAR()s, etc?
offer_date ist ein ZAHL-Feld
zusätzlich zu den oben genannten Kommentar, create_date ist ein DATE-Feld
Es wäre besser, wenn Sie könnte konvertieren der Datentypen für Datum-Spalten zu
DATE
. Warum NUMBER
für eine date-Spalte?InformationsquelleAutor Tom | 2012-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als
offer_date
ist eine Zahl, und ist von geringerer Genauigkeit als Ihre realen dates, dies kann funktionieren,...- Konvertieren Sie Ihre real date zu einem string von format
YYYYMM
- Conver, dass der Wert in einen INT
- Vergleichen Sie das Ergebnis Sie Ihre
offer_date
Auch, indem Sie all die manipulation auf der
create_date
Sie nur die Verarbeitung auf einen Wert.Darüber hinaus hatte Sie manipuliert die
offer_date
Sie nicht in der Lage sein nutzen jeder index auf das Feld, und so Kraft-SCANs anstelle von Sucht.InformationsquelleAutor MatBailie
Bin ich etwas fehlt? Sie können einfach konvertieren offer_date im Vergleich:
WHERE to_char(offer_date, 'YYYYMM') = (SELECT to_char(create_date, 'YYYYMM') FR...
haben die tricks... danke für den Hinweis mich in die richtige Richtung.Bitte beachten Sie; Verpackung
offer_date
imto_char()
wird verschleiern index auf das Feld. Stattdessen, Sie können alles tun, die Verarbeitung auf diecreate_date
, Sie brauchen nur zu tun, die einst für diese Abfrage, dann machen Verwendung von Indizes für einen index seek aufoffer_date
. [Tut manipulation auf Skalare Konstanten, die in nahezu unendlich vorzuziehen Manipulation der Daten wird gesucht.]InformationsquelleAutor Gordon Linoff