Doppelnamen

asterix

Benutzer
Beiträge
14
Hallo zusammen
Ich suche eine Funktion, mit der ich Namen aus der Datenbank herausbringe, wenn sie mit einem Bindestrich oder Leerschlag unterbrochen sind.
Also z.B. Stefan Müller-Meier möchte ich sowohl Stefan Müller wie auch Stefan Müller-Meier herausbekommen.

Was für einen Code muss ich einfügen?

$LoginRS__query=sprintf("SELECT Vorname, Name, ID FROM GRUENEBANK WHERE Vorname=%s AND Name=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));
 
Werbung:
Hallo zusammen
Ich suche eine Funktion, mit der ich Namen aus der Datenbank herausbringe, wenn sie mit einem Bindestrich oder Leerschlag unterbrochen sind.
Also z.B. Stefan Müller-Meier möchte ich sowohl Stefan Müller wie auch Stefan Müller-Meier herausbekommen.

Was für einen Code muss ich einfügen?

$LoginRS__query=sprintf("SELECT Vorname, Name, ID FROM GRUENEBANK WHERE Vorname=%s AND Name=%s",
GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text"));


Du könntest das Contrib-Modul pg_trgm nutzen:

Code:
test=# select * from (select 'Stefan Müller-Meier' as x union all select 'Stefan Müller') x where x % 'Stefan Müller';
ERROR:  operator does not exist: text % unknown
LINE 1: ... as x union all select 'Stefan Müller') x where x % 'Stefan ...
  ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
Time: 0,485 ms
test=*# create extension pg_trgm;
CREATE EXTENSION
Time: 10,798 ms
test=*# select * from (select 'Stefan Müller-Meier' as x union all select 'Stefan Müller') x where x % 'Stefan Müller';
  x
---------------------
 Stefan Müller-Meier
 Stefan Müller
(2 rows)

Time: 0,398 ms

Allerdings mußt Du dazu vorher auf PostgreSQL wechseln ...
 
Herzlichen Dank für eure Antworten.
Aber mit mySQL ginge das auch, oder nicht? Hat jemand noch eine Idee oder Hinweis, wie ich das machen könnte?
 
Aber mit mySQL ginge das auch, oder nicht?

Doch. Wenn Du nur Deine ursprüngliche Anforderung umgesetzt haben willst kannst Du mit "NAME LIKE '%Müller%'" suchen.
Noch besser ist aber die Beschäftigung mit regulären Ausdrücken wie von Hony vorgeschlagen oder mit der Mysql-Funktion Soundex.
 
Wenn du immer nur den ersten Namen bis zum Leerschritt / Bindestrich oder den vollen Namen verwenden willst ginge es auch anders:
Code:
SELECT    left(vorname,patindex('%[ ,-]%',vorname)-1) AS vorname
FROM    personen
WHERE    vorname LIKE '% %'
OR        vorname LIKE '%-%'
UNION ALL
SELECT    vorname
FROM    personen
Wenn du allerdings beliebig viele Namen aus einem String extrahieren willst wird das so nicht gehen.

PS: patindex() ist MSSQL, musst du in MySQL mal gucken.
 
Werbung:
Zurück
Oben