SQL Select nach Telefonnummer mit Sonderzeichen...

Registriert
Nov. 2013
Beiträge
2
Hallo,

ich versuche gerade einen SQL Select Befehl nach einer Telefonnummer durchzuführen. Grundsätzlich eine einfache Aufgabe.
Allerdings ist die Telefonnummer leider mit weiteren Zeichen (mal Bindestrich, mal Slash, usw.) versehen...

Gibt es eine Möglichkeit hier eine Select Abfrage durchzuführen.

Zur Verdeutlichung eine Beispieltabellenstruktur:
[table="width: 500, class: grid, align: left"]
[tr]
[td]NAME[/td]
[td]LAND[/td]
[td]TELNR[/td]
[/tr]
[tr]
[td]Hans[/td]
[td]Deutschland[/td]
[td]01234/58742816[/td]
[/tr]
[tr]
[td]Sebastian[/td]
[td]Deutschland[/td]
[td]089-124853485[/td]
[/tr]
[tr]
[td]Martin[/td]
[td]Deutschland[/td]
[td]01514765215[/td]
[/tr]
[tr]
[td]Bastian[/td]
[td]Deutschland[/td]
[td]0512/41281282[/td]
[/tr]
[/table]


Ich bekomme nun eine Telefonnummer die immer ohne jegliche Zeichen ist. Anhand dieser Nummer muss ich nun den Namen herausfinden...
Gegeben ist also Nummer "089124853485". Wie komme ich nun an den Namen "Sebastian".

Habt Ihr da Ideen?


Edit:
Das ganze basiert auf einen Microsoft SQL Server 2005.
 
Hallo

Hier stand ein nicht konstruktiver Beitrag!


Gruß matze
 
Zuletzt bearbeitet:
Hi,

du könntest die Sache mit LIKE angehen und hinter dem Befehl die letzten 6 Zeichen der Rufnummer eingeben.

z.B. SELECT Name FROM Tabelle WHERE TELNR LIKE '%853485'

Grüße
 
Hallo,
versuche zunächst alle Sonderzeichen zu identifizieren.
Code:
select distinct substring(TELNR,patindex('%[^0-9]%',TELNR),1)
from Tabelle
Danach würde ich bei Sybase zu einem Ersetzen mit str_replace() anraten.

Für den MS SQL Server scheint jedoch die Funktion replace(TELNR,'%[^0-9]%','') alles auf einmal zu erledigen.

Code:
select Name 
from Tabelle
where replace(TELNR,'%[^0-9]%','') = '089124853485'

Frank
 
Zuletzt bearbeitet: (Beispiel eingefügt)
Evtl. würde ich der einfachheit halber erstmal nen export nach excel machen und die ganzen sonderzeichen entfernen (suchen / eretzen).
dann das eingabefeld für die telefonnummer auf integer setzen das das nicht mehr vorkommt.
 
Zuletzt bearbeitet:
ich würde es so machen:

select * from "tabelle" where spalte like "%89%" and spalte like "%124853485"

gibt aber noch auffüllung für einzelne zeichen oder befehle wie soundex (müßteste du mal in ruhe ausprobieren). du kannst auch mit replace in deiner abfrage die sonderzeichen mit einem leerstring ('') ersetzen und dann normal abfragen. excel-export ist viel zu aufwändig.
 
Weißt Du den immer, an welcher Stelle das Sonderzeichen ist? Denn dann sind einige Vorschläge hier nicht machbar...
Evtl. drüber nachdenken, aus der Spalte Tel-Nummer eine neue Tabelle zu machen mit Ländercode, Vorwahl, Durchwahl und Nummer z.B. Das wäre dann immer sauber und kann direkt abgefragt werden, in dem man die dann zusammensetzte.
 
Die Like-Suchen sind alle samt nichts, weil er unerwünschte Ergebnisse bekommt.

Entweder bereinigst du die Daten und änderst das Speichern oder du nimmst die Lösung von FrankR
 
Du könntest ja nach den ersten 3 Zahlen und den letzten 3 Zahlen suchen, mit "AND" verbunden.

Bei den Ergebnissen danach die alle Sonderzeichen entfernen und nochmals mit der EingabeNummer prüfen.
 
Hallom

vielen Dank für die zahlreichen Antworten in so kurzer Zeit...

Das Problem bei allen genannten "LIKE" Lösungen ist, dass ich ziemlich oft ungewollte Ergebnisse bekommen würde... Die fallen also leider raus..

Die Lösung von FrankR ist allerdings fast perfekt.
FrankR schrieb:
Für den MS SQL Server scheint jedoch die Funktion replace(TELNR,'%[^0-9]%','') alles auf einmal zu erledigen.

Code:
select Name 
from Tabelle
where replace(TELNR,'%[^0-9]%','') = '089124853485'

Frank
Warum nur fast perfekt? Nunja ich weiß nicht genau warum. Also benötige ich hier wieder hilfe ;)
Sobald ich die von FrankR angegeben
Code:
'%[^0-9]%'
als Zeichenfolge anwende bekomme ich kein Ergebniss... Gebe ich stattdessen
Code:
'-'
als Zeichenfolge an, findet er das passende Ergebniss.
Da ich gerne übersichtliche Befehle verwende würde ich jetzt ungern ein Replace nach dem Anderen anreihen um alles außer Zahlen auszugrenzen.. Da gefällt mir die angedachte Lösung von FrankR besser.. Nur irgendwie scheint es nicht vollständig zu greifen...
 
Hallo,
ich habe hier kein MS SQL zum testen vermute aber, dass ich der der Funktion replace() zuviel zugetraut habe. Daher könntest du die folgende Kombination mit substring() und patindex() probieren.

Code:
select NAME
from Tabelle
where replace(TELNR,substring(TELNR,patindex('%[^0-9]%',TELNR),1),'') = '089124853485'

oder ohne replace()

Code:
select NAME
from Tabelle
where left(TELNR,patindex('%[^0-9]%',TELNR)-1) + substring(TELNR,patindex('%[^0-9]%',TELNR)+1,len(TELNR)) = '089124853485'

FrankR
 
Zurück
Oben