Hi Roland,
da du deutsche Wochentage brauchst, schreib ich dir auf deutsch.
Ich hab auch keinen Sprachsupport gefunden, also ist es nötig, eine kleine Umsetztabelle einzuführen. Das sieht auf den ersten Blick komplex aus, aber es funktioniert. Ich würde Dir empfehlen, den Select, wie ich ihn entworfen habe, in einen eigenen Zugriff zu schreiben, den du dann immer wieder aufrufen kannst.
Also, die Sache funktioniert so: Mit DayOfWeek bekommst du immer die laufende Nummer eines Wochentags, beginnend bei Sonntag.
Sonntag=1
Montag=2
Dienstag=3
usw.
Hier der Select(nicht erschrecken, ist gar nicht so wild wies zuerst aussieht):
SELECT
date_format('2003-04-24',
concat(
rtrim(
mid(
'Sonntag Montag Dienstag Mittwoch DonnerstagFreitag Samstag ',
((dayofweek('2003-04-24' )- 1)*10)+ 1,10)),
', %d-%m-%Y' )
)
Also: Der Dayofweek liefert dir eine Zahl zwischen eins und sieben. Mit dieser Zahl kann ich den Offset berechnen, ab wann ich meinen Tagnamenstring lesen muss. Also: Sonntag=1, also muss ich von der Position ((1-1=0)*10)+1 lesen, weil: Der längste Tagname ist Donnerstag mit 10 Zeichen, also müssen jetzt alle Tagnamen 10 Zeichen im String haben(achte auf die notwendigen Leerzeichen). Für Montag ergibt sich dann 2-1=(1*10)+1=11 als Startposition usf. Wenn ich in der Länge 10 lese, kann ich immer den vollen Tagnamen erhalten, lese ich nur in der Länge 2 oder 3, er halte ich Mo, Di Mi bzw. Mon, Die, Mit etc. Mit dem letzten Parameter der Mid-Funktion steuerst du also die Länge der Ausgabe (der gefettete Parameter). Rtrim schneidet nur die überflüssigen Blanks ab.
Lästig ist nur, daß ich das Datum zweimal an die Funktion übergeben muß, aber dafür hast du zwei Vorteile: Das ganze ist in eine wiederverwendbare Funktion gekapselt, und es ist ein reiner SQL-Aufruf ohne DB-Zugriff, d.h., es ist kein weiterer php- oder sonstwelcher Code zu pflegen und die Datenbank wird nicht belastet.
Das Ganze kann man dann natürlich auch auf Monate erweitern....
Thomas