Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL: Informationen aus einem Datum auslesen (https://www.delphipraxis.net/79544-sql-informationen-aus-einem-datum-auslesen.html)

sunnyandy 24. Okt 2006 15:40

Datenbank: mySql • Version: 5 • Zugriff über: Zeos

SQL: Informationen aus einem Datum auslesen
 
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! :thumb:

mkinzler 24. Okt 2006 15:58

Re: SQL: Informationen aus einem Datum auslesen
 
Versuchs mal mit
SQL-Code:
EXTRACT(YEAR FROM pr.datum)
bzw
SQL-Code:
EXTRACT(MONTH FROM pr.datum)

nahpets 24. Okt 2006 16:03

Re: SQL: Informationen aus einem Datum auslesen
 
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

sunnyandy 24. Okt 2006 17:23

Re: SQL: Informationen aus einem Datum auslesen
 
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...
:gruebel:

Hansa 24. Okt 2006 17:50

Re: SQL: Informationen aus einem Datum auslesen
 
Zitat:

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 :
SQL-Code:
WHERE

nahpets 25. Okt 2006 08:35

Re: SQL: Informationen aus einem Datum auslesen
 
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

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

Stephan

mkinzler 25. Okt 2006 08:53

Re: SQL: Informationen aus einem Datum auslesen
 
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
)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 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