If-Statement bei Verwendung von HSql

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

If-Statement bei Verwendung von HSql

Beitrag von anho1000 »

Hi Leute,

ich bin gerade dabei eine DB in Base zusammenzubasteln. Verwendet wird die "OOo-Datenbank", also nicht MySQL, weil die DB auch auf Rechnern verwendet werden muss, auf denen nur Openoffice läuft und nichts anderes.

Bei einer SQL-Abfrage bräuchte ich nunmehr eine IF-Abfrage, um zwei Felder zusammenzuführen. Ähnlich dem "Problem", wenn Vor- und Nachnahme zusammengeführt werden und der Vorname ein Leerfeld ist, sodass ein störendes Leerzeichen entsteht.

Und genau dieses Leerzeichen will ich vermeiden. Testweise, ob meine IF-Abfrage funktioniert, habe ich den Ausdruck abgespeckt zu (ich weiß, dass keine Leerzeichen entfernt werden würde..., ist auch nur testweise):

SELECT CONCAT(IF(LENGTH(feld1), feld1, ''), feld2) As gesamtfeld FROM tbl_test

Wenn ich diese Abfrage ausführen will, erhalte ich folgende Fehlermeldung:

SQL-Status: 37000
Fehler-Code: -11

Unexpected token: IF in statement [SELECT CONCAT(IF(LENGTH(feld1), feld1,''), feld2) As gesamtfeld FROM tbl_test]

Auch dann, wenn ich die Feld- und Tabellenamen in Anführungszeichen schreibe, erhalte ich diese Fehlermeldung.

Ist eine IF-Abfrage nicht möglich. Oder gibt es Umwege, die man gehen kann? Ich bräuchte diese Abfrage für einen Bericht.

In der Forumssuche habe ich nichts gefunden und per google hatte ich ebenfalls keinen Erfolg.

Für Hinweise und Tipps oder gute Dokus u.ä. bin ich dankbar.

Grüße

Andreas
OpenSuSE 11.4 - 64 Bit
OOo 3.2.0
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Andreas,
Ist eine IF-Abfrage nicht möglich.
Genau. Eine "If" - Anweisung gibt es in MySQL, nicht aber - meines Wissens in der normalen SQL-Syntax.
Und Base in Verbindung mit HSQLDB kennt dieses Konstrukt auch nicht.
Die HSQLDB kennt die CASEWENN(a1, a2, a3) Anweisung, wobei das bedeutet, dass wenn der Parameter a1 wahr ist, wird a2 zurückgeliefert, sondt a3.
Das Problem ist, dass diese CASEWHEN() Anweisung wieder nur bei HSQLDB funktioniert, die allgemeien SQL Anweisung CASE... WHEN... ist noch nicht implementiert und versagt.
Also bleibt nur: Für jede verwendete Datenbank spezielle Programmierung ;-)

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
anho1000
*
Beiträge: 13
Registriert: Sa, 23.10.2004 08:32
Wohnort: 77855 Achern
Kontaktdaten:

Beitrag von anho1000 »

Hallo Toxitom,

danke für Deine schnelle und vor allem hilfreiche Antwort! Jetzt kann ich schonmal an der Abfrage weiterbasteln.

Dass verschiedene Konstruktionen bei verschiedenen DBs nötig sind, ist zwar ärgerlich, aber, wenn man es weiß, nicht so dramatisch. Wieder eine Zeile in meinem schlauen Buch. :wink:

Grüße

Andreas
OpenSuSE 11.4 - 64 Bit
OOo 3.2.0
Antworten