mondragor
Goto Top

MSSQL Abfragen, wo Spalteninhalt in Vergleichsparameter enthalten sein soll...

Hallo,

ich habe ein Problem mit einer MSSQL-Abfrage, die ich machen will.
Es gibt beispielsweise 3 mögliche Vergleichsparameter, wie
- "weiße Schokolade"
- "braune Schokolade"
- "bittere Schokoladen"

und in einer Tabelle, die ich abfrage, steht nun z.B. in `Tabelle1$`.SPALTE1 in irgendeiner Zeile
" Schokolade".
Dieser Eintrag soll für alle 3 Parameter gefunden werden.
Prinzipiell bedeutet das, dass also der Spalteneintrag in dem Suchparameter quasi als Substring
enthalten sein muss.
Doch wie kann ich das formulieren?
Ich habe verschiedenes in MSQRY32 versucht, wie z.B.:

SELECT * FROM `c:\tabelle`.`Tabelle1$` Tabelle1
WHERE '%`Tabelle1`.SPALTE1%' LIKE "braune Schokolade"

oder

...
WHERE '%'+Tabelle1`.SPALTE1+'%' LIKE "braune Schokolade"

Leider ohne erfolg.
Frage: Wie kann man erfolgreich einen String mit Regexes zusammenbauen, am Beispiel dieser Where-Klausel
oder gibt es gar eine Funktion, die prüfen kann, ob ein Spalteneintrag als "Substring" in einem String enthalten ist?

Vielen Dank im Voraus für Eure Antworten.

Grüße,
Mondragor

Content-ID: 202312

Url: https://administrator.de/contentid/202312

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

LianenSchwinger
LianenSchwinger 25.02.2013 um 13:12:22 Uhr
Goto Top
Hallo Mondragor,

das müsste mit folgendem RegEx klappen:

(braune|weiße|bittere)? Schokolade(n)?

Getestet unter http://regexpal.com/ mit folgendem Suchtext.

Das ist braune Schokolade
Das ist weiße Schokolade
Das sind bittere Schokoladen
Das ist nur Schokolade
Das ist gelbe Schokolade

G Jörg
Mondragor
Mondragor 25.02.2013 um 13:22:22 Uhr
Goto Top
Hallo Jörg,

erstens weiß ich nicht, in welcher Weise ich das in die Abfrage einbauen soll?
Außerdem ist von Anfang an nicht unbedingt klar, welche Worte / Zeichenfolgen
vor / hinter "Schokolade" folgen. Die Parameter sind Variablen. braune, weiße und bittere waren nur
Beispiele, wie das aussehen könnte.
Gibts da nicht sowas wie beliebig lange / beliebige Zeichenketten?
LianenSchwinger
LianenSchwinger 25.02.2013 um 13:36:30 Uhr
Goto Top
Hallo,

zu 1) wie baue ich das ein:

SELECT *
FROM 'c:\tabelle'.'Tabelle1$' Tabelle1   
WHERE Tabelle1.SPALTE1 REGEXP '(braune|weiße|bittere)? Schokolade(n)?'  

zu 2) was steht denn z.B. in Deinen Parameter(n)?

G Jörg
Mondragor
Mondragor 25.02.2013 um 14:30:28 Uhr
Goto Top
Hallo nochmal Jörg,

zu 2.)
Es stehen verschiedene Sachen drin und es steht momentan nicht fest, was in Zukunft drin stehn wird.
Das kann von Tag zu Tag mehr werden und genau das ist ja das Problem. Der Spalteninhalt soll fest sein,
die Parameter aber nicht. Der Spalteninhalt " Schokolade" (hier nur ein Beispiel) soll immer gefunden werden,
wenn beliebige Zeichen quasi "% Schokoladen%" im Parameter steht. Wenn es also möglich.
Oft hat man ja den Fall, dass man sucht:

... WHERE `Tabelle1`.SPALTE1 LIKE '%Parameter%'

Hier ist es aber genau umgekehrt. Quasi
WHERE '%`Tabelle1`.Spalte1%' LIKE 'Parameter'
.
Das will ich nur eben auch funktionstüchtig haben, bei CONCAT oder '%'+ ... zeigt er aber kein ergebnis bzw. kennt CONCAT nicht und auch REGEXP erkennt er nicht. Das kann aber auch an msqry32 liegen, kann ich nicht mit Sicherheit sagen.
LianenSchwinger
LianenSchwinger 25.02.2013 um 14:40:27 Uhr
Goto Top
Hallo,

Ups, erstmal Entschuldigung hatte das MSSQL überlesen und gedacht, es geht um MySQL.

In MSSQL gibt es glaube ich gar keine regulären Ausdrücke.

G Jörg
MadMax
MadMax 26.02.2013 um 12:41:57 Uhr
Goto Top
Hallo Mondragor,

Zitat von @Mondragor:
Hier ist es aber genau umgekehrt. Quasi
WHERE '%`Tabelle1`.Spalte1%' LIKE 'Parameter'

Wenn es genau umgekehrt ist, dann schreib es doch auch genau umgekehrt::
where 'Parameter' like '%' + Tabelle1.Spalte1 + '%'  

Gruß, Mad Max
Mondragor
Mondragor 11.03.2013 um 11:08:25 Uhr
Goto Top
Wir haben das Problem nun anders gelöst. Danke trotzdem für Eure Antworten.
Mir war das zu unsicher, auf welche syntaktischen und semantischen Grundsätze die Software, die in sich nicht MS ist,
zurückgreift. Daher sind wir auf nummer sicher gegangen und haben die Gleichheit von Parameter und Tabellenwert in die
Abfrage geschrieben.
MSQRY32 hat nicht alles unterstützt, was wir gebraucht hätten. Ob die Drittanbietersoftware alle SQL-Befehle kennt, weiß
ich eben auch nicht. Drum lieber die Tabelle angleichen als die Gefahr einzugehen, dass es keine eindeutigen Ergebnisse gibt.