Ich hatte bisher immer nur mit mysql zu tun. Jetzt freue ich mich pgsql zu testen. Leider habe ich Probleme bei der Umstellung von mysql-Abfragen auf postgres, da mir die mysql-Funktionen YEAR, MONTH, DAY fehlen. Wie funktioniert das bei pgsql?
Es geht um diese zwei Abfragen, die mir Zugriffe je Tag, Monat und Jahr aufschlüsseln:
[font=Arial]
[/font] [font=Arial] SELECT b.date,count(*) FROM
(SELECT a.date FROM `accesslog` a WHERE a.xsname!='-' GROUP BY
YEAR(a.date), MONTH(a.date), DAY(a.date), a.cclientid, a.xsname ORDER BY a.date) b GROUP BY b.date
[/font]
und
[font=Arial] SELECT YEAR(b.date), MONTH(b.date), count(*) FROM
(SELECT a.date FROM `accesslog` a where a.xsname!='-' GROUP BY
YEAR(a.date), MONTH(a.date), a.cclientid, a.xsname ORDER BY a.date) b GROUP BY YEAR(b.date),
MONTH(b.date)
[/font]
[font="]Gibt es ähnliche Hilfsfunktionen, damit die Abfrage einfach gehalten werden kann?
Hoffe Ihr habt einen guten Tipp für mich.
Schade. Klappt leider nicht, da mein Feldtyp “date” ein varchar ist und den darf ich nicht ändern. Das war mysql glücklicherweise egal.
Die DATE/TIME-Funktionen von pg benötigen immer ein time, date der timestamp - Format.
Trotzden vielen Dank.
Falls es noch eine andere Möglichkeit gibt, immer posten. Ansonsten werden die Abfragen halt etwas länger.
lg
Der Cast zu einem date (wie von ads vorgeschlagen) funktioniert nur, wenn Dein varchar auch ein vernünftiges (Standard)Format hat. Ansonsten musst Du das mit to_date() zuerst in ein Date umwandeln:
extract(month from to_date(dumme_varchar_spalte, 'mm.DD.yyyy'))
So, und da wir schon beim Thema sind, sollte ich ev. auch meinen Vortrag “von MySQL auf PostgreSQL portieren” für nächste Woche endlich mal fertig schreiben …