AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL: Informationen aus einem Datum auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

SQL: Informationen aus einem Datum auslesen

Ein Thema von sunnyandy · begonnen am 24. Okt 2006 · letzter Beitrag vom 25. Okt 2006
Antwort Antwort
sunnyandy

Registriert seit: 24. Feb 2006
49 Beiträge
 
#1

SQL: Informationen aus einem Datum auslesen

  Alt 24. Okt 2006, 16:40
Datenbank: mySql • Version: 5 • Zugriff über: Zeos
Hallo nochmal!

Habe in einer Tabelle mit dem Namen "provisionen" unter anderem ein Datumsfeld und dort möchte ich auslesen, welche Monate und Jahre es gibt in der Tabelle.

SQL-Code:
SELECT DISTINCT(EXTRACT(YEAR_MONTH FROM pr.datum))
FROM provisionen pr
Damit bekomme ich folgendes Ergebnis:
"200610"

Also Oktober 2006, ist ja richtig. Möchte aber das Jahr in einer Spalte und den Monat in einer andere getrennt anzeigen lassen, das ist das Problem.
Wenn ich folgendes tu

SQL-Code:
SELECT LEFT(DISTINCT(EXTRACT(YEAR_MONTH FROM pr.datum)), 4)
FROM provisionen pr
um nur das Jahr in einer Spalte anzeigen zu lassen, gibt es einen Fehler. Schätze mal die LEFT-Anweisung geht nicht bei einer DISTINCT-Anweisung.

Für eure Hilfe wäre ich natürlich wieder seeehr dankbar!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL: Informationen aus einem Datum auslesen

  Alt 24. Okt 2006, 16:58
Versuchs mal mit EXTRACT(YEAR FROM pr.datum) bzw EXTRACT(MONTH FROM pr.datum)
Markus Kinzler
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: SQL: Informationen aus einem Datum auslesen

  Alt 24. Okt 2006, 17:03
Hallo,

warum nicht mit

SELECT DISTINCT(EXTRACT(YEAR FROM pr.datum))
FROM provisionen pr

okay, hab kein mySQL zur Verfügung.

Könnte es eventuell so aussehen:

Select distinct EXTRACT(YEAR FROM pr.datum) As Jahr, EXTRACT(MONTH FROM pr.datum) As Monat
FROM provisionen pr

Was passiert hier?

Es werden für alle Zeilen Jahr und Monat gesammelt und dann per Distinct Duplikate "weggeworfen".

Damit dürfte Left... dann entfallen.

Stephan
  Mit Zitat antworten Zitat
sunnyandy

Registriert seit: 24. Feb 2006
49 Beiträge
 
#4

Re: SQL: Informationen aus einem Datum auslesen

  Alt 24. Okt 2006, 18:23
Danke,
es hat funktioniert

Habe es nun mit
SQL-Code:
SELECT DISTINCT(EXTRACT(YEAR FROM pr.datum)), EXTRACT(MONTH FROM pr.datum)
FROM provisionen pr
gelöst, wie du sagtest. Aber wenn ich das DISTINCT vor das Jahr schreibe, dürfte dann ein Jahr nicht nur einmal erscheinen?
Aber du hast Recht, nun sehe ich alle Monate, die es in 2006, in 2005 usw...gibt.
Also ich verstehe nicht, warum das DISTINCT hier alle überflüssigen Kombinationen aus Jahr und Datum wegwirft, obwohl es nur vor dem Jahr steht...
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: SQL: Informationen aus einem Datum auslesen

  Alt 24. Okt 2006, 18:50
Zitat von sunnyandy:
Habe es nun mit
SQL-Code:
SELECT DISTINCT(EXTRACT(YEAR FROM pr.datum)), EXTRACT(MONTH FROM pr.datum)
FROM provisionen pr
gelöst, wie du sagtest. Aber wenn ich das DISTINCT vor das Jahr schreibe, dürfte dann ein Jahr nicht nur einmal erscheinen?
Wo ist das Wunder ? Von der Datenbank wird verlangt, alles zu liefern, wo Monat und Jahr passen. Das Zauberwort ist : WHERE
Gruß
Hansa
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

Re: SQL: Informationen aus einem Datum auslesen

  Alt 25. Okt 2006, 09:35
Hallo,

das Problem mit dem Distinct:

Die Syntax mit Distinct(...) finde ich gewöhnungsbedürftig, hab' sie so noch bei keiner anderen Datenbank gesehen.

Eigentlich bezieht sich das Distinct auf die gesamte Zeile und nicht nur auf den Wert einer einzelnen Spalte.
Für meine Begriffe dürfte die Datenbank in etwa folgendermaßen vorgehen:

Hole alle Zeilen, die der genannten Bedingung entsprechen (Select).

Entferne alle Duplikate aus der Ergebnismenge (Distinct).

Eventuell kann man sich das so vorstellen:

SQL-Code:
Select Distinct * from
(
  select spalte1, spalte2, ... from Tabelle where x = y
)
Zuerst wird das Select in den Klammern ausgeführt und über das Ergebnis wird ein zweites Select ausgeführt, das die Duplikate entfernt.

Eine Alternative wäre auch

  select spalte1, spalte2, ... from Tabelle where x = y group by spalte1, spalte2, ... Hier dürfte das gleiche Ergebnis bei herauskommen.

Stephan
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: SQL: Informationen aus einem Datum auslesen

  Alt 25. Okt 2006, 09:53
MySQL unterstützt m.W. keine Derived Tables:
Zitat:
Eventuell kann man sich das so vorstellen:

SQL-Code: markieren
Select Distinct * from
(
select spalte1, spalte2, ... from Tabelle where x = y
)
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz