SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Moderator: Moderatoren
SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo,
das hier ist leicht:
SELECT * FROM "Adressen" WHERE ( "Vorname" LIKE '%#' )
Nun suche ich Dasselbe, aber das # soll ein * (Stern) sein, welcher nicht als Platzhalter ausgewertert wird, sondern als Teil des Textes in Vorname.
Gruß
Stephan
das hier ist leicht:
SELECT * FROM "Adressen" WHERE ( "Vorname" LIKE '%#' )
Nun suche ich Dasselbe, aber das # soll ein * (Stern) sein, welcher nicht als Platzhalter ausgewertert wird, sondern als Teil des Textes in Vorname.
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Stephan,
da wirst Du wohl auf die direkte SQL-Ausführung umklicken müssen, denn das Sternchen wird durch die GUI in "beliebiges Zeichen" umgewandelt.
Gruß
Robert
da wirst Du wohl auf die direkte SQL-Ausführung umklicken müssen, denn das Sternchen wird durch die GUI in "beliebiges Zeichen" umgewandelt.
Gruß
Robert
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Guten Morgen Stephan,
wenn das Sternchen immer am Ende steht, sollte auch folgendes funktionieren:
Gruß R
wenn das Sternchen immer am Ende steht, sollte auch folgendes funktionieren:
Code: Alles auswählen
SELECT * FROM "Adressen" WHERE RIGHT( "Vorname",1) = '*'
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Robert,RobertG hat geschrieben: Fr, 23.07.2021 18:22 Hallo Stephan,
da wirst Du wohl auf die direkte SQL-Ausführung umklicken müssen, denn das Sternchen wird durch die GUI in "beliebiges Zeichen" umgewandelt.
Gruß
Robert
sofern das den Weg über Extras-SQL.... meint, hatte ich das bereits (erfolglos) versucht. Im Übrigen willich das SQL ohnehin in einem Makro einsetzen.
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo F3K Total,F3K Total hat geschrieben: Sa, 24.07.2021 08:56 Guten Morgen Stephan,
wenn das Sternchen immer am Ende steht, sollte auch folgendes funktionieren:Gruß RCode: Alles auswählen
SELECT * FROM "Adressen" WHERE RIGHT( "Vorname",1) = '*'
DAnke, das funktioniert einwandfrei.
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Stephan,
Und so funktioniert es lt. Handbuch:
Das geht sogar in der GUI und eben an jeder Stelle des Wortes.
Gruß
Robert
Nein: Entwurfsansicht in der Abfrage ausschalten und dann "SQL-Befehl direkt ausführen" wählen. Ist schon merkwürdig: In der Abfrageansicht funktioniert das, über Extras → SQL nicht.Stephan hat geschrieben: Sa, 24.07.2021 09:09 sofern das den Weg über Extras-SQL.... meint, hatte ich das bereits (erfolglos) versucht. Im Übrigen willich das SQL ohnehin in einem Makro einsetzen.
Und so funktioniert es lt. Handbuch:
Code: Alles auswählen
LIKE '%\*%' ESCAPE '\'
Gruß
Robert
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Robert
Genial!
Gruß R
Code: Alles auswählen
LIKE '%\*%' ESCAPE '\'
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Robert,RobertG hat geschrieben: Sa, 24.07.2021 09:27 Und so funktioniert es lt. Handbuch:Das geht sogar in der GUI und eben an jeder Stelle des Wortes.Code: Alles auswählen
LIKE '%\*%' ESCAPE '\'
Gruß
Robert
ich hatte es bereits selbst mit:
Code: Alles auswählen
SELECT * FROM "Adressen" WHERE "Vorname" LIKE '%\*'
Gleichzeitig kann ich nur "WOW" sagen, denn selbst letztere Info steht in Deinem Base-Handbuch, denn dort schreibst Du: " Es gibt kein Standard-Zeichen zur Maskierung (Escape-Zeichen)."
Eine Frage/Anmerkung muss ich jetzt aber loswerden:
ist es nicht sehr überraschend das "\" nicht zumindest als Default-Escape-Zeichen gilt?
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Stephan,
ich bin damals auch bloß stur die entsprechenden Seiten zu HSQLDB 1.8 durchgegangen und habe das ins Deutsche übertragen. Ich hätte allerdings auch ein Default-Escape-Zeichen erwartet. Dass die GUI damit weiterhin klar kommt zeigt, dass eben auch die Entwickler der GUI nah an der HSQLDB entwickelt haben. Bei MySQL z.B. ist das Escapezeichen auf einen Backslash festgeschrieben.
Aber so ganz einig ist sich die Welt da ja nicht. Schau einfach bei den Makros nach. Da musst Du ein doppeltes Anführungszeichen oben mit einem ebensolchen Anführungszeichen "Escapen".
Gruß
Robert
ich bin damals auch bloß stur die entsprechenden Seiten zu HSQLDB 1.8 durchgegangen und habe das ins Deutsche übertragen. Ich hätte allerdings auch ein Default-Escape-Zeichen erwartet. Dass die GUI damit weiterhin klar kommt zeigt, dass eben auch die Entwickler der GUI nah an der HSQLDB entwickelt haben. Bei MySQL z.B. ist das Escapezeichen auf einen Backslash festgeschrieben.
Aber so ganz einig ist sich die Welt da ja nicht. Schau einfach bei den Makros nach. Da musst Du ein doppeltes Anführungszeichen oben mit einem ebensolchen Anführungszeichen "Escapen".
Gruß
Robert
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Robert,
ich muss jetzt den Thread verlängern.
(a)
ein leeres Ergebnis bei einer Abfrage mit:
(Base hat das selbstständig von '%\*' auf '%\%' geändert)
(b)
eine Fehlermeldung bei einer Abfrage mit:
SQL-Status: 42000
Fehlercode: 1064
[MySQL][ODBC 8.0(w) Driver][mysqld-5.6.30]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\'' at line 1
(c)
einen sofortigen Absturz von Base wenn ich Extras-SQL... verwende:
Gleiches bei:
Gruß
Stephan
ich muss jetzt den Thread verlängern.
mmh... ich habe hier jetzt eine MYSQL-DB, per ODBC an LO angebunden, getestet und erhalteBei MySQL z.B. ist das Escapezeichen auf einen Backslash festgeschrieben.
(a)
ein leeres Ergebnis bei einer Abfrage mit:
Code: Alles auswählen
SELECT * FROM `Firma` WHERE `Firmenname` LIKE '%\%'
(b)
eine Fehlermeldung bei einer Abfrage mit:
Code: Alles auswählen
SELECT * FROM `Firma` WHERE `Firmenname` LIKE '%\*' ESCAPE '\'
Fehlercode: 1064
[MySQL][ODBC 8.0(w) Driver][mysqld-5.6.30]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''\'' at line 1
(c)
einen sofortigen Absturz von Base wenn ich Extras-SQL... verwende:
Code: Alles auswählen
SELECT * FROM `Firma` WHERE `Firmenname` LIKE '%\*'
Code: Alles auswählen
SELECT * FROM Firma WHERE Firmenname LIKE '%\*'
SELECT * FROM "Firma" WHERE "Firmenname" LIKE '%\*'
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Ich habe das jetzt auch als Makro ausprobiert. Das hier geht:
Das hier geht nicht:
weil das Resultsetz leer ist, was ich überprüfen kann mit z.B.:
Msgbox Resultset.Row
was -1 liefert
Gruß
Stephan
Code: Alles auswählen
DBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
DBSource = DBContext.getByName("awt-mysql3")
DBCon = DBSource.getConnection("root", "123")
SQL_string = "Select * FROM `Firma` WHERE `Firmenname` LIKE '%#'"
DBStatement = DBCon.createStatement()
DBStatement.ResultSetType = 1005
ResultSet = DBStatement.executeQuery(SQL_string)
cona = ResultSet.Columns.ElementNames
ResultSet.first
Msgbox ResultSet.getString(2)
Code: Alles auswählen
DBContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
DBSource = DBContext.getByName("awt-mysql3")
DBCon = DBSource.getConnection("root", "123")
SQL_string = "Select * FROM `Firma` WHERE `Firmenname` LIKE '%\*'"
DBStatement = DBCon.createStatement()
DBStatement.ResultSetType = 1005
ResultSet = DBStatement.executeQuery(SQL_string)
cona = ResultSet.Columns.ElementNames
ResultSet.first
Msgbox ResultSet.getString(2)
Msgbox Resultset.Row
was -1 liefert
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Stephan,
das Escape-Zeichen gilt nur für die Zeichen, die als Wildcard-Zeichen vertreten sind. Und das sind nur % und _, nicht aber *. Ich weiß nicht, weshalb auch bei der MariaDB nur die direkte SQL-Ausführung der Abfrage hier korrekt reagiert.
Und jetzt kommt der Geck:
funktioniert anscheinend wieder.
Ich gehe davon aus, dass Base da irgendetwas intern quer verarbeitet. Hinter ESCAPE darf so bei der MariaDB nur ein Zeichen stehen, das nicht dem ursprünglichen Escape-Zeichen entspricht.
Nehme ich stattdessen bei mir den Weg über PHPMyAdmin, dann funktioniert einfach '%*%' wie gewünscht, da eben das Sternchen kein Wildcardzeichen in diesem Zusammenhang ist.
Am meisten Sorge von der Programmgestaltung her macht mir hier Extras → SQL. Von dem sollte ja erwartet werden, dass der Code nicht irgendwo noch umgeändert wird, bevor er zur Datenbank läuft - so wie eben bei einer Abfrage, die in direktem SQL ausgeführt wird. Und genau wie Extras → SQL verhält sich hier die Makroanbindung.
Gruß
Robert
das Escape-Zeichen gilt nur für die Zeichen, die als Wildcard-Zeichen vertreten sind. Und das sind nur % und _, nicht aber *. Ich weiß nicht, weshalb auch bei der MariaDB nur die direkte SQL-Ausführung der Abfrage hier korrekt reagiert.
Und jetzt kommt der Geck:
Code: Alles auswählen
SELECT * FROM `Firma` WHERE `Firmenname` LIKE '%$*%' ESCAPE '$'
Ich gehe davon aus, dass Base da irgendetwas intern quer verarbeitet. Hinter ESCAPE darf so bei der MariaDB nur ein Zeichen stehen, das nicht dem ursprünglichen Escape-Zeichen entspricht.
Nehme ich stattdessen bei mir den Weg über PHPMyAdmin, dann funktioniert einfach '%*%' wie gewünscht, da eben das Sternchen kein Wildcardzeichen in diesem Zusammenhang ist.
Am meisten Sorge von der Programmgestaltung her macht mir hier Extras → SQL. Von dem sollte ja erwartet werden, dass der Code nicht irgendwo noch umgeändert wird, bevor er zur Datenbank läuft - so wie eben bei einer Abfrage, die in direktem SQL ausgeführt wird. Und genau wie Extras → SQL verhält sich hier die Makroanbindung.
Gruß
Robert
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Robert,
danke für Deine Hilfe und Kommentare.
Die Situation bei der Datenbank-Anwendungsprogrammierung mit Base finde ich insgesamt sehr ernüchternd. Detailproblem reiht sich an Detailproblem ...
Gruß
Stephan
danke für Deine Hilfe und Kommentare.
Die Situation bei der Datenbank-Anwendungsprogrammierung mit Base finde ich insgesamt sehr ernüchternd. Detailproblem reiht sich an Detailproblem ...
Gruß
Stephan
Re: SQL - SELECT alle Datensätze mit "*" (als Zeichen!) am Ende des Inhalts einer Datenspalte
Hallo Stephan,
ich habe da jetzt noch einmal mit ein Bugmeldung etwas nachgebohrt. Hier der Weg, der in Makros bereits geht. Habe ich so für das zukünfige Handbuch übernommen.
Gruß
Robert
ich habe da jetzt noch einmal mit ein Bugmeldung etwas nachgebohrt. Hier der Weg, der in Makros bereits geht. Habe ich so für das zukünfige Handbuch übernommen.
Mal sehen, ob wir ein entsprechendes Auswahlfeld in Extras → SQL eingebaut bekommen. Auch dort läuft nämlich dieses "ESCAPING", so dass eben die Ergebnisse nicht identisch sind.SQL-Befehle, die so abgesandt werden, entsprechen nicht genau dem, was z. B. bei den Abfragen über direkte SQL-Ausführung erreicht wird. Eine Abfrage wiegibt nicht nur die Namen mit einem '*' wieder, da intern aus dem '*' ein '%' erstellt wird.Code: Alles auswählen
… "Name" LIKE '%*%'
Um wirklich das gleiche Verhalten mit direkter SQL-Ausführung zu erhalten, mussnach der Erstellung von oSQL_Statement und vor der Ausführung des Codes eingefügt werden:Code: Alles auswählen
oSQL_Statement.EscapeProcessing = False
Code: Alles auswählen
oSQL_Statement = oConnection.createStatement() oSQL_Statement.EscapeProcessing = False
Gruß
Robert