Zum Inhalt springen

SQL-Abfrage aktueller Monat


Fuldaer_Bub

Empfohlene Beiträge

Hallo..

habe über die Suchfunktion keinen passenden Thread gefunden.

Und zwar ist mein Problem dieses, das ich eine SQL-Abfrage über den jeweils aktuellen Monat machen möchte.

Meine Abfrage sieht derzeit so aus :

SELECT HOT_Ticket.Erfassungsdatum, HOT_Ticket.AnfrageVon, HOT_Ticket.NaviGeraete, HOT_Ticket.GrundDerAnfrage, HOT_Ticket.Produktbereich

FROM HOT_Ticket HOT_Ticket

WHERE (HOT_Ticket.Erfassungsdatum>={ts '2004-02-01 00:00:00.000'} And HOT_Ticket.Erfassungsdatum<={ts '2004-02-29 00:00:00.000'}) AND (HOT_Ticket.ED_LandTelfKu='Deutschland')

ORDER BY HOT_Ticket.Erfassungsdatum

Die Tabellen liegen übrigens in einer Oracle-Datenbank.

Ich habe es auch schon mit WHERE (HOT_Ticket.Erfassungsdatum = month(Now()) probiert. Geht aber nicht.

Wer weiss Rat?

DANKE !

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das aktuelle Datum in Oracle bekommste mit

select sysdate from dual;

Nun kannste noch das zurückgelieferte Datum so beschneiden, daß nur der Monat über bleibt (mir fällt nur grad der Befehl net ein :rolleyes:) und dann die gesamte Abfrage als Unterabfrage in der Where Klausel verwenden

select * from Aufträge

where monat = (select sysdate from dual);

In der Unterabfrage fehlt natürlich das beschneiden auf den reinen Monat ....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kenne das Format deines Vergleichswerts nicht, aber angenommen es wäre char, dann müsstest du deine variable im where vergleichen mit dem ergebnis aus:

select to_char(sysdate, 'MM') from dual

alternativ geht auch statt 'MM' (Monat als zweistellige Zahl):

'MON' (dreistelliger Monatsname z.B. FEB für Februar)

'MONTH' (MONATSNAME, -> 'Month' ergibt Monatsname....)

sollte funktionieren, kann derzeit leider nicht auf unsere DB hier connecten ums selber vorabzutesten, da die neue Version aufgespielt wird

Link zu diesem Kommentar
Auf anderen Seiten teilen

dual ist eine dummytabelle unter oracle, die jeder user nutzen kann. sie besteht aus einer dummyspalte und einer zeile mit dem wert x (x is hier halt sysdate).

WHERE (HOT_Ticket.Erfassungsdatum 'MM' = select sysdate 'MM' from dual)

vorausgesetzt, deine spalte erfassungsdatum ist im date format. du musst über die formatangabe des datums dein erfassungsdatum auf moat einschränken und das ganze mit nem ebenfalls auf monat eingeschränkten subselect mit sysdate vergleichen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Fuldaer_Bub

@Brunswick : Danke schonmal für Deine Antwort. Ein Subselect ist eine Unterabfrage richtig? Wenn ich mich recht erinnere, muss ich das irgendwie mit Klammern einbauen. Ohje, bin nicht sonderlich fit in SQL. *schwitz*

hier steht du weisst nicht was ein subselect ist, geschweige denn wie man ihn anwendet. Das oben war ein Beispiel wies geht.

notfalls poste deine db struktur und dein sql. damit kann man dann wenigstens arbeiten

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von kills

notfalls poste deine db struktur und dein sql. damit kann man dann wenigstens arbeiten

Mein SQL was ich benutze ist MS Query ( in Verbinbung mit Excel) die DB ist Oracle.

Leider habe ich kein Oracle-Client und weiss auch nicht in welchem Format die Felder dort liegen....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Fuldaer_Bub

@kills : Danke. Ich werde es gleich mal ausprobieren. Aber was nen subselect ist, weiss ich schon. Nur bekomme ich es gerade nicht auf den Schirm wie ich es in meinem jetzigen Fall anwenden soll.

Oben schon gepostet und nun erweitert:

select * from tabelle

where to_char(monat, month) = (select to_char(sysdate, month) from dual);

sollte auch mit MS Query klappen.

Die mit den beiden Typecasts "to_char" stellste sicher, dass beide male das datum als char im reinen monatsformat vorliegt, damit du auch vergleichen kannst.

Die unterabfrage rechts vom gleichzeitszeichen in der where klausel selektiert das aktuelle Systemdatum und extrahiert daraus den Monat.

das sternchen, sowie tabelle musst du natürlich entsprechend deiner tabellenstruktur anpassen ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber muss ich nicht noch angeben, das sich to_char auf Erfassungsdatum.HOT_Ticket bezieht?

Auch komme ich nicht mit : "where to_char(monat, month)" klar.

Muss ich das nicht irgendwie mit "month (now())" machen, damit ich immer die Abfrage auf den aktuellen Monat mache?

Ohje, Freitag ist kein Denk-Tag . :confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Grad gesehen, dass du ja oben deine Abfrage schon gepostet hattest .... :

Sollte dann wie folgt funzen:


SELECT HOT_Ticket.Erfassungsdatum, HOT_Ticket.AnfrageVon, HOT_Ticket.NaviGeraete, HOT_Ticket.GrundDerAnfrage, HOT_Ticket.Produktbereich

FROM HOT_Ticket HOT_Ticket

WHERE to_char(HOT_Ticket.Erfassungsdatum, 'month') = (select to_char(sysdate, 'month') from dual)

And (HOT_Ticket.ED_LandTelfKu='Deutschland')

ORDER BY HOT_Ticket.Erfassungsdatum

Kann allerdings sein das es statt 'month' jeweils "month" heissen muss .. hab grad keinen zugriff auf ne oracle db .. deswegn bin ich ein bisserl unsicher ...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Fuldaer_Bub

@dgr243 : Das funkt. leider nicht. Query meldet mir :

"Eine SQL-Abfrage kann nicht grafisch dargestellt werden. Möchten sie trotzdem fortfahren ?"

und dann :

"Expected lexical element not found = , <>, <, <=, > or => "

:confused: :confused:

Meldet er dir auch ne Stelle an der das gemeldet wird ?

Also zeile x zeichen y oder sowas ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Fuldaer_Bub

Ne, leider nicht. So schlau ist MS Query anscheinend nicht. :(

Hmm ich werd mir dat zu Hause ma ansehen.. Da hab ich wenigstens ne Oracle DB zum Testen ;)

Meld mich nochmal (und bis dahin sag ich mal wem Bescheid, er soll hier ma rein sehen.... der is ja schliesslich Oracle DB Entwickler....)

Link zu diesem Kommentar
Auf anderen Seiten teilen

So, der versprochene Oracle DB Entwickler meldet sich aus seinem Urlaub ;)

So, also ... erstmal verstehe ich eine Kleinigkeit nicht ... du arbeitest nur auf einer Tabelle, warum dann jedesmal dieses HOT_Ticket ?

Kannst du dich mit SQL*Plus auf die DB direkt connecten ?

Ist HOT_Ticket.Erfassungsdatum in der DB wirklich ein DATE ?

Ich wuerde dann erstmal wieder den angesprochenen Cast verwenden ... to_date (nein, nicht verlesen), denn wir haben jeweils ein Datum, dass auf verschiedene Art und Weise gespeichert ist. Also bringen wir beide Daten aufs gleiche Format, naemlich Monat ;)

to_date(HOT_Ticket.Erfassungsdatum, "MM")

Soweit so gut, gelle ?

Mit MS Query kenne ich mich kaum aus, daher sind die Tips nur zu gebracuhen, wenn MS sich da an das SQL von Oracle haelt.

hth

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Matze... :)

Das ich immer HOT_Ticket davor setze ist sicherlich nicht notwendig, macht MS Query aber auch immer automatisch mit hin.

Ob "Erfassungsdatum" wirklich Date-Format hat, weiß ich nicht, konnte mir hier auch noch keiner beantworten. Ich vermute aber mal das Datum ist als Timestamp abgelegt ( ist da ein Unterschied??)

Wenn ich

WHERE to_date(HOT_Ticket.Erfassungsdatum, "MM") verwende, würde das dann so aussehen ?

SELECT HOT_Ticket.Erfassungsdatum, HOT_Ticket.AnfrageVon, HOT_Ticket.NaviGeraete, HOT_Ticket.GrundDerAnfrage,

 HOT_Ticket.Produktbereich  FROM HOT_Ticket HOT_Ticket 

 WHERE to_date(HOT_Ticket.Erfassungsdatum, "MM") = (select to_date(sysdate, "MM") from dual) 

 And (HOT_Ticket.ED_LandTelfKu='Deutschland')  

ORDER BY HOT_Ticket.Erfassungsdatum

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wow hat der Matze das tatsächlich gemacht ;)

Original geschrieben von Fuldaer_Bub

SELECT HOT_Ticket.Erfassungsdatum, HOT_Ticket.AnfrageVon, HOT_Ticket.NaviGeraete, HOT_Ticket.GrundDerAnfrage,

 HOT_Ticket.Produktbereich  FROM HOT_Ticket [b]HOT_Ticket[/b]

 WHERE to_date(HOT_Ticket.Erfassungsdatum, "MM") = (select to_date(sysdate, "MM") from dual) 

 And (HOT_Ticket.ED_LandTelfKu='Deutschland')  

ORDER BY HOT_Ticket.Erfassungsdatum

Also ich finde das statement sieht gut aus, bis auf den Teil den ich fett gedruckt hab oben.

da is doch was doppelt, oder nicht ?

Funzt die Abfrage denn ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

... wenn ich da mal was in die Expertenrunde streuen darf:

MS Query ist eine abgespeckte, nichtsdestotrotz aber ODBC-konnektive SQL-Variante für den "Office-Heimgebrauch" oder für Freaks. ;)

Daraus ergibt sich folgende Basis:

a) Essentiell werden alle Daten in ODBC-konforme Formate gecastet.

(Das macht uns hier vieles leichter, wie du gleich erkennen wirst.)

B) MS Query KANN kein einziges Wort SQL*Plus (oder sonstige Derivate) sprechen.

(Daher ist jeder Versuch, sich von dieser Seite zu nähern, zum Scheitern verurteilt. Es entspräche dem Versuch, sein eigenes Auto für einen Porsche zu halten, nur weil man beim Einsteigen durch das Beifahrerfenster einen Porsche sehen kann.)

@Fuldaer_Bub

Mein Tipp: Leg das Ding weit, weit ... seeeeeehr weit ... weg. Microsoft hat daran seit Jahren nichts mehr gemacht, und deshalb ist es auf einem Stand, der bestenfalls archaisch zu nennen ist.

Folgender Weg:

Den Weg zum MS Query - Editor kennst du ja bereits, wie du oben geschildert hast.

Dort muss es einen Menüpunkt oder Schalter "SQL-Direkt" oder so geben. (Ich habe das Bild nur sehr verschwommen vor Augen ... sorry.)

Daraufhin öffnet sich dann ein neues Fenster, in das du deine Abfrage direkt eingeben können solltest. Gib dann einfach folgendes ein:

SELECT Erfassungsdatum, AnfrageVon, NaviGeraete, GrundDerAnfrage, Produktbereich

FROM HOT_Ticket

WHERE DatePart(month, Erfassungsdatum) = DatePart(month, getdate())

Damit werden alle Daten zurückgegeben, deren Erfassungsdatum im aktuellen Monat liegt. (Hinweis: Wenn Daten mehrerer Jahre vorliegen, werden diese unberücksichtigt des Jahres ausgegeben. Ein Abgleich des Jahres wäre also opportun, ist aber hier nicht gefordert.)

... und jetzt wieder zurück zum Thema, lasst euch von mir bitte nicht stören ... Entschuldigung für die Unterbrechung der Podiumsdiskussion. ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...