Seite 1 von 2

SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Do 10. Nov 2011, 02:13
von SignalSpirit
Hallo zusammen,

mich treibt gerade eine Abfrage in den Wahnsinn.

Ich brauche folgendes: Eine Abfrage vereinigt 2 Felder aus einer Tabelle, wobei dazwischen ein String eingefügt werden soll.
Also Feld1 + Zeichenkette + Feld2

Tabelle: Etikettendruck
Feld1: Test1
Feld2: Test2
Neues Feld in der Abfrage: Test3
Zeichenkette: " + "

Normalerweise sollte das doch mit Folgender SQL-Abfrage funktionieren

Code: Alles auswählen

SELECT "Test1" + '   +   ' +  "Test2" AS "Test3" FROM "Etikettendruck"
Die nimmt aber LibreOffice nicht an (Fehler in SQL-Syntax)

Code: Alles auswählen

SELECT "Test1" +  "Test2" AS "Test3" FROM "Etikettendruck"
Wird angenommen, da fehlt aber dann natürlich die Zeichenkette :cry: .

Kann mir jemand sagen, was ich falsch mache?

Gruß SignalSpirit

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Do 10. Nov 2011, 02:56
von gogo
Du kannst mit concat verschachteln (HSQL erlaubt pro concat nur 2 Bergiffe, daher die 2 concats):

Code: Alles auswählen

SELECT concat(concat("Test1",'+'), "Test2") AS "Test3" FROM "Etikettendruck"
g

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Do 10. Nov 2011, 11:35
von SignalSpirit
Super! Danke für die schnelle Antwort! Das funktioniert.

Hast du eine Idee, warum HSQL meinen ursprünglichen Befehl nicht mag?

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Do 10. Nov 2011, 23:11
von F3K Total
... oder so ...

Code: Alles auswählen

SELECT "Test1" || '   +   ' || "Test2" AS "Test3" FROM "Etikettendruck"
Gruß R

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Mo 31. Mär 2014, 16:56
von Freischreiber
Hallo,

auf dieses Thema bin ich gestoßen, weil ich eine Abfrage erstellen will, die einen vollständigen Adressblock liefert.

Dazu benötige ich auch Absätze, um Straße und PLZ Ort in eine neue Zeile zu bekommen.

Gibt es dafür einen HSQL-Befehl? Ich habe mit \r\n, mit char(13), mit crlf experimentiert, aber das schmeckt ihr alles nicht...

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Mo 31. Mär 2014, 18:09
von gogo
das kommt immer auf die interprtierende Oberfläche an. Die Datenbank liefert immer nur ein Zeichen - ob dieses dann als Umbruch dargestellt wird, entscheidet nicht die Datenbank.

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Mo 31. Mär 2014, 18:15
von Freischreiber
Hallo gogo,

die interpretierende Oberfläche ist LibreOffice Base: Table Data View, also das Fenster, das aufgeht, wenn ich die Abfrage starte.

Welches Zeichen könnte man denn nehmen, damit eine neue Zeile anfängt?

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Mo 31. Mär 2014, 18:58
von RobertG
Hallo Freischreiber,

ich zitiere hier einmal das aktuelle Handbuch, S. 277:
Zeilenumbruch durch eine Abfrage erreichen
Manchmal ist es sinnvoll, durch eine Abfrage verschiedene Felder zusammenzufassen und mit
einem Zeilenumbruch zu trennen. So ist es z.B. einfacher eine Adresse in einen Bericht komplett
einzulesen.
Der Zeilenumbruch innerhalb einer Abfrage erfolgt durch 'Char(13)'. Beispiel:
SELECT "Vorname"||' '||"Nachname"||Char(13)||"Straße"||Char(13)||"Ort"
FROM "Tabelle"
Dies erzeugt nachher:
Vorname Nachname
Straße
Ort
Mit so einer Abfrage, zusammen mit einer Nummerierung jeweils bis zur Nummer 3, lassen sich
auch dreispaltige Etikettendrucke von Adressetiketten über Berichte realisieren. Eine Nummerie-
rung ist in diesem Zusammenhang nötig, damit drei Adressen nebeneinander in einem Datensatz
erscheinen. Nur so sind sie auch nebeneinander im Bericht einlesbar.
Die Darstellung mit Zeilenumbruch erfolgt nicht in der Abfrageansicht, sehr wohl aber im Bericht oder auch in mehrzeiligen Formularfeldern.
Im Handbuch sind dann auch noch die Eingaben für einen Tabulator sowie einen sicheren Zeilenumbruch in Linux/Mac enthalten. Siehe dazu S. 358. Char(9) - Tabulator, Char(10) - Zeilenvorschub
Manchmal ist es sicherer, Char(13)||Char(10) zu kombinieren. Das ist sozusagen die universelle Variante für alle Systeme, um einen sicheren Umbruch zu erhalten.

Gruß

Robert

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Di 1. Apr 2014, 12:14
von Freischreiber
Hallo,

vielen Dank, es scheint so wirklich zu gehen. Leider kann man dem Handbuch nicht ansehen, daß man Absätze nicht direkt in der Abfrage sieht.

Was ich eigentlich will, ist irgendeine Methode, eine Adresse aus dem gerade angezeigten Datensatz in definierter Form in ein Textdokument zu bekommen, also als

Vorname Name
Straße Hausnr.
PLZ Ort

Am liebsten direkt in die Windows-Zwischenablage, oder kopierbar in einem Textfeld. Ob das per Abfrage, Makro, mehrzeiligem Textfeld oder sonst wie geht, ist mir eigentlich gleichgültig.

Aber ich scheitere auf sämtlichen Stufen:

Ich kriege aus der Abfrage kein Textfeld hin mit dem Formularnavigator. Ich kann zwar eines einfügen, aber der Inhalt bleibt immer gleich (Adresse aus Datensatz 1), und wechselt nicht mit, wenn ich die Datensätze durchblättere.

Und der - nicht aktualisierte - Datensatz ist auch noch nicht in der Zwischenablage, sondern ich muß ihn von Hand kopieren.

Eine Lösung mit Libreoffice-Writer-Feldern und Einfügen aus Datenquelle bringt mir nichts, ich brauche ihn in der Zwischenablage, weil ich noch viele alte Word-Dokumentvorlagen habe, wo die Adresse rein soll...

Re: SQL Abfrage: Feld1 + Text + Feld2

Verfasst: Di 1. Apr 2014, 14:14
von Freischreiber
Juhu, es geht... meine Abfrage hatte nur eine Spalte für die SQL-Abfrage für das kombinierte Textfeld Vorname,Name,etc. enthalten, und keine ID. Mit einer zusätzlichen ID-Spalte gibt es was, um das Textfeld-Formular ordentlich mit dem Hauptformular zu verknüpfen... Erfolge bei Base sind wirklich hartes Brot :mrgreen:

Eine Idee, wie man dieses Adreßfeld in die Zwischenablage bekommt, ist aber immer noch sehr willkommen.