Abfrage mysql -> pgsql

Hallo, liebe community.

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=&quot]Gibt es ähnliche Hilfsfunktionen, damit die Abfrage einfach gehalten werden kann?
Hoffe Ihr habt einen guten Tipp für mich.

lg
Ralf
[/font]

Du suchst nach extract: PostgreSQL: Documentation: Manuals: PostgreSQL 9: Date/Time Functions and Operators

z.B.

extract(month from a.date)

Ja, klasse. Versuch ich gleich mal!

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

SELECT deinfeld: :D ATE

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'))

Details zu to_date() wie immer im Handbuch:
PostgreSQL: Documentation: Manuals: PostgreSQL 9: Data Type Formatting Functions

Edit: Du solltest auch ganz schnell von dem dämlichen varchar auf date umstellen. Das macht das Leben viel einfacher…

Vor allem macht es die Sache um längen performanter!

Beide Varianten funtionieren bestens:
A) deinfeld: :smiley: ATE
B) extract(month from to_date(dumme_varchar_spalte, ‘yyyy-mm-dd’))


Vielen Dank dafür.

Vor allem macht es die Sache um längen performanter!

Meinst Du damit Abfrage A) oder B) oder C) - generell Performanter?
lg

Ich meinte das verwenden von passenden Datentypen :wink:

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 …