Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Doppelnamen

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von asterix, 10 November 2014.

  1. asterix

    asterix Benutzer

    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"));
     
  2. Hony%

    Hony% Datenbank-Guru

  3. akretschmer

    akretschmer Datenbank-Guru


    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 ...
     
  4. asterix

    asterix Benutzer

    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?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Wenn ich Dich richtig verstehe suchst Du Dinge wie http://www.postgresql.org/docs/9.3/static/fuzzystrmatch.html oder http://www.postgresql.org/docs/9.3/static/pgtrgm.html , was es da für MySQL gibt weiß ich nicht, vielleicht hilft Dir Google. Passende Stichwörter hast ja nun.
     
  6. Walter

    Walter Administrator Mitarbeiter

    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.
     
  7. ukulele

    ukulele Datenbank-Guru

    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.
     
  8. asterix

    asterix Benutzer

    Herzlichen Dank für eure Hilfen!
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden