5 messages in com.mysql.lists.mysql-deName zu Telefonnummer trotz verschied...| From | Sent On | Attachments |
|---|---|---|
| Bastian Schern | 22 May 2008 10:55 | |
| Joerg Bruehe | 22 May 2008 12:05 | |
| Bastian Schern | 23 May 2008 00:57 | |
| Joerg Bruehe | 23 May 2008 01:28 | |
| Thomas Goik - echtwahr.com | 23 May 2008 11:16 |
| Subject: | Name zu Telefonnummer trotz verschiedener Formatierung finden![]() |
|---|---|
| From: | Bastian Schern (ml...@reventix.de) |
| Date: | 05/22/2008 10:55:18 AM |
| List: | com.mysql.lists.mysql-de |
Hallo,
ich versuche gerade den Namen zu einer Telefonnummer in meiner Adress-DB zu finden.
Das Problem ist, dass sowohl die Telefonnummern in der DB als auch die Telefonnummern, die abgefragt werden in den unterschiedlichsten Formatierungen vorliegen können. Beispiel: 03012345678 = (030) 123 456 78 00493012345678 = +49.30.12345678 12345678 = +49 (0)30 12345678 ...
Ich habe sogar etwas hinbekommen. In `NAME1` stehen die Namen und in `TELE1` die Telefonnummern. '03012345678' ist die gesuchte Rufnummer. Das dass so mit den Variablen nicht funktioniert weiß ich, ich hab' es nur so hingeschrieben, damit man es besser lesen kann. Wenn man die Variablen aber einsetzt, macht die SQL Abfrage IMHO das was ich mir gedacht habe:
SELECT `NAME1`, `TELE1`, @prefix_1:=REPLACE( REPLACE( `TELE1`, ' ', '' ), '(', '' ), @e164_1:=TRIM( LEADING '0' FROM TRIM( LEADING '+' FROM REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( `TELE1`, ' ', '' ) , '(0)', '' ), '(', '' ), ')', '' ), '/', '' ), '-', '' ), '.', '' ) ) ), @prefix_2:=REPLACE( REPLACE( '03012345678', ' ', '' ), '(', '' ), @e164_2:=TRIM( LEADING '0' FROM TRIM( LEADING '+' FROM REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( '03012345678', ' ', '' ) , '(0)', '' ), '(', '' ), ')', '' ), '/', '' ), '-', '' ), '.', '' ) ) ), @country_code='49', @area_code='30' FROM `ADRESSEN` WHERE IF( LENGTH( REPLACE( `TELE1`, ' ', '' ) ) > 0, IF( LEFT( @prefix_1, 2 ) = '00', CONCAT( 'int: 00', @e164_1 ), IF( LEFT( @prefix_1, 1 ) = '+', CONCAT( 'int: 00', @e164_1 ), IF( LEFT( @prefix_1, 1 ) = '0', CONCAT('nat: 00', @country_code,@e164_1 ), CONCAT('loc: 00', @country_code,@area_code, @e164_1) ) ) ), '' ) = IF( LENGTH( REPLACE( '03012345678', ' ', '' ) ) > 0, IF( LEFT( @prefix_2, 2 ) = '00', CONCAT( 'int: 00', @e164_2 ), IF( LEFT( @prefix_2, 1 ) = '+', CONCAT( 'int: 00', @e164_2 ), IF( LEFT( @prefix_2, 1 ) = '0', CONCAT('nat: 00', @country_code,@e164_2 ), CONCAT('loc: 00', @country_code,@area_code, @e164_2) ) ) ), '' ) LIMIT 1;
Hat jemand eine Idee wie man das vereinfachen kann? insbesondere das REPLACE geht bestimmt eleganter.
Vielen Dank schon einmal im Voraus.
Viele Grüße Bastian




