SQL Befehl nach Geburtsmonat selektieren?

3 Antworten

Designtechnisch ist das meiner Ansicht nach eien Katastrophe. Wer bitteschön schreibt ein Datum als String in eine Datenbank. Da lässt sich doch nicht ordentlich selektieren oder sortieren.

Deine Lösung sollte aber funktionieren.

Ich rate dir aber dennoch, dir irgendetwas zu holen, mitd em du die Abfragen testen kannst.(Ich hätte spontan folgendes gefunden, falls du dir nichts lokal installieren willst: https://www.db4free.net/index.php?language=de)

EDIT:

Ich sehe gerade: Dein SELECT ist so nicht valide. Wie Ceeesy759 sagt musst du dich entweder zwischen einer Liste von Namen oder dem *-Operator entscheiden.


KarlRanseierIII  09.05.2020, 01:59

ISO-Daten lassen sich von je her ordentlich sortieren (Jahr-Monat-Tag, numerisch), das war ja der Hintergrund der Festlegung. Die DIN hatte es ja auch zum einzigen normgerechten numerischen Datum gekürt.

Bis sie merkte: Kannst nem ollen Köter keien neuen Kunststücke mehr beibringen :-D.

An den FS:

Zum Testen kann man auch auf sqlfiddle oder db fiddle o.ä. zurückgreifen.

Und bei solchen Fragen vorzugsweise das Schema dazuliefern, dann weiß man auch, wovon man spricht.

Ceeesy759  09.05.2020, 10:44
@KarlRanseierIII

Guter Tipp mit DB Fiddle. In Verbindung mit dem Random Data Generator Mockaroo hat man da schnell etwas zusammengestellt.

Schema_SQL (name der Tabelle muss komischerweise "test" sein, sonst Fehlermeldung):

create table test (
    id INT,
    name VARCHAR(50),
    vorname VARCHAR(50),
    gebtag DATE
);
insert into test (id, name, vorname, gebtag) values (1, 'Kenna', 'Castelow', '1994-12-14');
insert into test (id, name, vorname, gebtag) values (2, 'Gui', 'Asaaf', '1971-03-20');
insert into test (id, name, vorname, gebtag) values (3, 'Kalli', 'Hewson', '1960-04-26');
insert into test (id, name, vorname, gebtag) values (4, 'Harlan', 'Morot', '1992-08-04');
insert into test (id, name, vorname, gebtag) values (5, 'Reade', 'Toffts', '2018-04-29');

Query_SQL:

SELECT name, vorname, gebtag FROM test WHERE gebtag LIKE '%-04-%' ORDER BY gebtag ASC;
spelman  08.05.2020, 14:59

"Designtechnisch ist das meiner Ansicht nach eien Katastrophe." - Das ist wie im richtige Leben. Da muß man auch mit der Datenbank zurechtkommen, die irgendein Praktikant vor 15 Jahren mal aufgesetzt hat, und die seither am Leben gehalten wird weil niemand mehr genau weiß, was alles dranhängt und zusammenbricht, wenn man mal eine vernünftige Neuimplementation machen würde...

spelman  08.05.2020, 15:01
@Destranix

Ist das nicht die Standardausrede, wenn was offensichtlich Mist ist, und es keiner gewesen sein will?

IceTim001 
Beitragsersteller
 08.05.2020, 14:57

Vielen Dank! Und ja keine Ahnung die Datenbank ist von unserem Lehrer.

Ceeesy759  08.05.2020, 15:09

Ob die Daten wirklich als STRING vorliegen, wissen wir gar nicht. Es kann durchaus als DATE vorliegen, aber halt in der Ausgabe als YYYY-MM-DD dargestellt werden.

Da der Fragesteller von Lehrer und nicht von Dozent spricht, würde ich hier eher einen Gang zurück schalten 😉

Destranix  08.05.2020, 15:11
@Ceeesy759

Ja, das kanns ein. Ich frage mich allerdings, warum man eine derartige View definieren sollte.

Destranix  08.05.2020, 15:13
@Ceeesy759
Da der Fragesteller von Lehrer und nicht von Dozent spricht, würde ich hier eher einen Gang zurück schalten

Anzumerken ist das dennoch. Schon da es ein gewisses Wissen vermittelt und für die Problematik sensibilisiert.

Ceeesy759  08.05.2020, 16:28
@Destranix

Das hat meiner Einschätzung nach nichts mit der view zu tun. Die view kann genau so ein Datum liefern, welches dann aber für die Darstellung als YYYY-MM-DD angezeigt wird, weil das im entsprechenden Anzeigeprogramm (z. B. PHP-Datenbankabruf) als Standard definiert ist. Und selbst dann weiß man nicht, ob es nun ein DATE oder STRING ist, sondern muss dies gesondert abfragen.

Ceeesy759  08.05.2020, 16:32
@Destranix

Ja, aber auch hier macht der Ton die Musik. Du beschwerst dich, dass es so nicht filterbar und sortierbar sei. Aber eine Empfehlung, wie man es denn besser macht, lieferst du nicht.

Demotivierend ja, hilfreich nein.

Destranix  09.05.2020, 08:48
@Ceeesy759
welches dann aber für die Darstellung als YYYY-MM-DD angezeigt wird

Dir ging es also tatsächlich um die Darstellung. Ich hatte angenommen du beziehst dich auf Views, da die Darstellung für die Abfrage selbst ja wenig relevant sein dürfte.

Und selbst dann weiß man nicht, ob es nun ein DATE oder STRING ist, sondern muss dies gesondert abfragen.

Ich verstehe nicht ganz, was du meinst. Im Normalfall weiß man doch, die die Daten in der eigenen Datenbank gespeichert sind.

Ja, aber auch hier macht der Ton die Musik. Du beschwerst dich, dass es so nicht filterbar und sortierbar sei.

Nicht "nicht" sondern nicht undbednint schön. An sich ist das so durchaus filterbar. Würde man eine andere Datumsreprädentation wählen, beispielsweise dd-mm-yyyy, dann wäre es nicht mehr filterbar. An sich finde ich den Fakt unschön, dass das Datum in der Datenbank als String gespeichert wird, statt als Zahl oder Ähnliches.

Aber eine Empfehlung, wie man es denn besser macht, lieferst du nicht.

Das ist korrekt. Ein versäumnis meinerseits.

Demotivierend

Da ich in keinsterweise den Fragesteller Angriff wird es diesen kaum demotivieren. Ich weiß also nicht, auf wen sich diese Aussage deinerseits beziehen soll.

Klingt plausibel. Beim select musst du dich entscheiden

  • Alles auswählen mit "SELECT *"
  • Nur benötigte Spalten auswählen mit "SELECT name, Vorname, gebtag"

Aber sortiert müsste es ASC (ascending - aufsteigend) sein, denn sonst steht 2020 oben und 1930 unten


SELECT name

FROM users

WHERE birthday LIKE "%-Geburtsmonat-%".