SQLite Abfrage mit Monatsnamen

Pacher

Benutzer
Beiträge
5
Hallo liebe Community!
Beschäftige mich erst seit kurzem mit SQLite und bin gerade dabei ein Programm von MYSQL auf SQLite zu konvertieren...
Hab aber jetzt ein größeres Problem bei einer SQL Abfrage...

In MYSQL lautet der String (gekürzt):
Code:
..... GROUP BY MONTHNAME(sdate) order by FIELD(MONTH,'January','February','March', 'April', 'May', 'June', 'July', 'August',.....usw

Habe es jetzt in SQLite zu:
Code:
....GROUP BY strftime('%m',sdate) order by (CASE month WHEN 'January' THEN 1 WHEN 'February' THEN 2  WHEN 'March' THEN 3... usw
übersetzt!

Die Abfrage funktioniert auch tadellos, nur wird mir für jedes Monat nur 01, 02, 03, 04 ... usw. ausgegeben, hätte aber gerne für ein Chart den jeweiligen vollen
Monatsnamen benötigt.

Kann mir da jemand bitte auf die Sprünge helfen??!!
LG Pacher
 
Werbung:
Das geht glaub ich nicht mit nativen Funktionen.
Du musst entweder ein Case Statement bauen oder entsprechend der Nummern 1-12 eine "Übersetzungstabelle" dazu anlegen.

sqlite ist ein nettes kleines Teil, teilweise erstaunliche Funktionen dafür, aber das Datums Thema in Kombi mit nationalen Übersetzungen usw. ist schon ein ziemlicher Brocken. Da muss man dann zu größeren Systemen greifen.
 
Das geht glaub ich nicht mit nativen Funktionen.
Hmmm... eigentlich unglaublich von so einem mächtigen System, aber schon mal Danke für die Antwort!

Aber anders gefragt, gibt es in SQLite keine Funktion wo ich aus einem Datum nur den Monatsnamen bekomme bzw. entsprechend formatieren kann?
 
Zuletzt bearbeitet von einem Moderator:
schon mal reflektiert, wofür das 'Lite' im Namen stecken könnte?
Das hätte man sicher auch geschmeidiger sagen können, aber naja...

Für mich war es wichtig eine "Portable" und für User unkomplizierte Datenbank zu handeln und bin auch eigentlich sehr zufrieden damit.
Habe bisher alles was ich bei MySQL an Funktionen benötigt habe, nachbilden bzw. übersetzen können, aber das anscheinend bei SQLite es an so einer "Mini-Grund" Funktion mangelt, das überrascht mich jetzt doch!!
 
Es geht auch nicht um gut oder schlecht.
Wenn Du keine andere Funktion findest, Du kannst ja im Handbuch nachschlagen, dann nimm meinen Vorschlag mit der Hilfstabelle.
 
Für mich war es wichtig eine "Portable" und für User unkomplizierte Datenbank zu handeln und bin auch eigentlich sehr zufrieden damit.
Habe bisher alles was ich bei MySQL an Funktionen benötigt habe, nachbilden bzw. übersetzen können, aber das anscheinend bei SQLite es an so einer "Mini-Grund" Funktion mangelt, das überrascht mich jetzt doch!!
Es ist vollkommen ok, sqlite einzusetzen. Und ich kann es mir nicht verkneifen, als mySQL sicher nicht schlecht.
Hier ist ein Beispiel für die Hilfstabelle. Die und den Grundgedanken kannst Du sicher noch für andere SQL Statements gebrauchen.
Code:
create table month_gr(id smalint primary key not null check (id >0 and id<13), month_name varchar(15) not null);
insert into month_gr(id, month_name) values
( 1, 'Januar'),
( 2, 'Februar'),
( 3, 'März'),
( 4, 'April'),
( 5, 'Mai'),
( 6, 'Juni'),
( 7, 'Juli'),
( 8, 'August'),
( 9, 'September'),
(10, 'Oktober'),
(11, 'November'),
(12, 'Dezember');
select date('now') as AktuellesDatum, month_name from month_gr where strftime('%m',date('now'))=id;

AktuellesDatum | month_name
---------------------------
2021-12-08     | Dezember
 
Solch ein Vorgehen entspricht der Natur eines relationalen Datenbanksystems. Daten, die nicht ableitbar zur Verfügung stehen, muss man dem System zur Verfügung stellen.
Dabei musst Du hier und in vergleichbaren fällen beachten, dass der Weg, die Informationen zu erlangen nicht äquivalent zum Aufruf einer Funktion ist, wenn man einfach eine neue Tabelle irgendwo rein joined.
Eine Funktion liefert "immer" ein Ergebnis, im Zweifel ein leeres oder falsches. Hier in dem Fall würde also in den Daten ein Monatsname fehlen. Es ändert zunächst nichts an der Ergebnismenge (außer das Funktionsergebnis ist Teil eines Joins)
Ein Join der Hilfstabelle mit den Rohdaten muss genau nach Bedarf gewählt werden und sollte (unerwünschte) Daten - Fehler berücksichtigen. Du möchtest vielleicht eher auf den Monatsnamen verzichten, als auf eine komplett fehlende Teilmenge der Daten.
Ich habe versucht, über die Tableconstraints Fehlbestückung in der Monatstabelle zu minimieren. In der Form verhindern sie zwar das ein oder andere Problem. aber bspw. nicht, dass zu wenig Monate definiert sind. Kannst Du selbst probieren, wie Dein SQL Statement in solch einem Fall sein Ergebnis verändert... wie gesagt, anders als bei einer Funktion.
 
Werbung:
Bastle gerade an einem Chart/Diagramm für ein Dashboard und da soll die Abfrage eben Monatsnamen liefern... und eben nicht 11 oder 12
Werd's mit der Hilfstabelle schon hinbiegen... nochmals Danke!

Screenshot (7).png
 
Zurück
Oben