Vinzenz Mai: Sqlite: Suchfunktion scheitert

Beitrag lesen

Hallo,

ich weiss wie schwierig es ist jemanden etwas beizubringen der nicht den gleichen Wissensstand hat. Aus dem Grund sind die meissten Fachbücher schlecht. Man hat einfach nicht mehr die Sichtweise eines Nichtwissenden.

ich hab' vor allem keine Glaskugel.

Ich kannte Deinen Wissensstand nicht. Ich ging davon aus, dass Du weißt, dass Du links eine Zeichenkette zusammenbaust und über LIKE nachschaust, ob Dein Suchwort enthalten ist. Woher sollte *ich* wissen, dass Du *nicht* weißt, was in SQLite der ||-Operator bewirkt?

Wenn ich nun:
select * from test_5 where coalesce(name,str,plz,ort,tel,eml,info) LIKE '%test%';

dann ist dies falsch. Das liefert Dir vor dem Vergleich die erste nicht leere Spalte. Was ist wenn Dein Suchbegriff erst in der zweiten nichtleeren Spalte auftritt? Dann versagt Deine WHERE-Klausel.

Rouven sagte dagegen:
Baue eine garantiert nicht den Wert NULL enthaltene Zeichenkette zusammen, indem Du sie aus Einzelstücken zusammenbaust, die *aller* garantiert nicht NULL sind:

COALESCE(name, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

COALESCE(str, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

COALESCE(name, '') || COALESCE(str, '') ist garantiert nicht NULL und liefert Dir Deinen Treffer auch dann, wenn das Suchwort in der Spalte str vorkommt und auch die Spalte name nicht leer ist.

COALESCE(plz, '') ist garantiert nicht NULL, sondern gegebenenfalls der Leerstring. Dieser verfälscht Dir nicht Dein Ergebnis.

COALESCE(name, '') || COALESCE(str, '') || COALESCE(plz, '') ist garantiert nicht NULL und liefert Dir Deinen Treffer auch dann, wenn das Suchwort in der Spalte plz vorkommt und auch die Spalten name (und/oder) str nicht leer sind.

Die Fortsetzung müsstest Du selbst hinbekommen ...

Freundliche Grüße

Vinzenz