Wenn der Datentyp der my_date
Spalte ist in der Tat, VARCHAR 2 (was nicht sein sollte, aber es ist oft), dann müssen Sie es zuerst in Datum und dann zurück in Char (String) in einem anderen Format konvertieren. Wenn 44 nicht unbedingt eine Zahl ist, sondern das Ergebnis einer Berechnung oder einer Unterabfrage oder eines Werts in einer anderen Tabelle (und wenn es vom Datentyp NUMBER ist), müssen Sie genau das tun, was Sie getan haben . Was war das Problem damit?
Vielleicht möchten Sie wissen, ob dies effizienter durchgeführt werden kann So zum Beispiel, können Sie stattdessen schreiben die where
Zustand als
my_date between (something) and (something else)
, die die Verwendung eines Index auf my_date
erlauben würde? Die Antwort ist NEIN, wenn my_date
im VARCHAR2-Format ist - Sie müssten es immer noch in to_date()
umhüllen, so dass Sie den Index verlieren würden.
Aber Sie können eine Indexfunktion auf to_date(my_date)
bauen, die Ihnen vielleicht auch in anderen Fragen helfen würde. Also ist die Frage, wie Sie Ihre aktuelle Anfrage effizienter gestalten können, sinnvoll.Nun ist die Schwierigkeit der ISO-Woche nicht klar definiert (Sie sagen auch nicht, welches Jahr), also ist die Annahme, dass das Datum in der ISO-Woche 44 sein soll, egal in welchem Jahr es ist. Wenn das Datum a ist reine Datum (Zeitkomponente gleich 00.00.00), können Sie dies tun:
where to_date(my_date, 'MM/DD/YYYY') between
trunc(sysdate, 'iw') + 7 * (44 - to_number(to_char(sysdate, 'iw'))) and
trunc(sysdate, 'iw') + 7 * (44 - to_number(to_char(sysdate, 'iw'))) + 6
Es gibt eine Menge von Berechnung auf der rechten Seite, aber sie sind nur einmal für alle Zeilen erfolgt in dein Tisch; sie werden im Wesentlichen keine Zeit brauchen.
Wenn 'my_date' eine' DATE'-Spalte ist, dann ist der Ausdruck 'to_date (my_date, 'MM/DD/YYYY') 'überhaupt nicht sinnvoll. Es konvertiert das 'DATE' in ein varchar, um es wieder in' DATE' umzuwandeln, mit dem es beginnen sollte. Niemals 'to_date()' für Werte aufrufen, die bereits ein 'date' sind –
Betreffs des @ a_horse_with_no_name-Kommentars: Welcher Datentyp ist die 'my_date'-Spalte? Ihre zusammengesetzte Funktion sieht korrekt aus, wenn es ein varchar2 ist (was es nicht sein sollte, es sollte DATUM-Datentyp sein, aber diese Art von schlechtem Tabellenentwurf ist sehr üblich, und oft müssen Sie die Hand spielen, die Sie ausgeteilt bekommen haben). – mathguy
my_date ist ein DATE, ich kann einfach to_char (my_date, 'IW') – iAmoric