Sql, greift where auf spalte oder select zu?
Hallo
ich habe eine grundlegende frage zu sql. wenn ich die daten auslese schreibe ich direkt nach dem select die spalten, welche herangezogen werden sollen.
Nun möchte ich mit WHERE noch die daten weiters filtern.
Leider muss ich das Datum zuerst in das richtige Zeitformat convertieren.
Reicht es, dies einmal bei der Select angabe zu machen? greift das where auf das select object zu oder nimmt es den wert aus der spalte?
hier ein beispiel:
SELECT spalte1, CONVERT_TZ(`Datum_spalte`, '+02:00', 'UTC') FROM meineTabele WHERE CONVERT_TZ(`Datum_spalte`, '+02:00', 'UTC') = "......."
oder reicht es wenn ich ich nur am anfang die daten konvertiere, da das where mit den convertierten daten weiter arbeitet:
SELECT spalte1, CONVERT_TZ(`Datum_spalte`, '+02:00', 'UTC') FROM meineTabele WHERE `Datum_spalte` = "......."
Danke
3 Antworten
Du kannst der umgewandelten Spalte auch einen Namen geben und mit diesem dann arbeiten:
SELECT spalte1, CONVERT_TZ(`Datum_spalte`, '+02:00', 'UTC') AS Datum_converted FROM meineTabele WHERE Datum_converted = "…"
Ich hab es grade mit mySQL und MS SQL-Server getestet. Die können beide nur die erste Variante.
Was aber zumindest bei mySQL funktioniert: Wenn du Spalten gruppierst, kannst du im "Having"-Abschnitt den selbst benannten Spaltennamen benutzen, also z.B. sowas:
SELECT COUNT(spalte1) AS Anzahl, CONVERT_TZ(`Datum_spalte`, '+02:00', 'UTC') AS Konvertiertes_Datum
FROM meineTabelle
GROUP BY Konvertiertes_Datum
HAVING Konvertiertes_Datum = '2022-12-24'
Das geht auch ohne Gruppierung, allerdings läuft das natürlich langsamer, als wenn du die Abfrage mit WHERE machst, weil er so erstmal eine ganze Ergebnistabelle aufbaut und erst nachträglich mit "HAVING" den Teil rausfiltert, den du sehen willst.
Du musst beim WHERE auch konvertieren
Könnte doch sein, du suchst ein bestimmtes Datum, willst aber den Wochentag als Ausgabe.