2016-08-05 15 views
0

Ich suche Telefonnummern aus einer Liste basierend auf ihrem Präfix auszuschließen. Einige Länder haben längere oder kürzere Präfixe als andere. Großbritannien zum Beispiel +44, Frankreich +33, Vatikanstadt 379, Gibraltar +350Verwenden einer veränderbaren Längennummer und linke Funktion zum Ausschließen von Ergebnissen

Ich mag würde Ergebnisse auszuschließen, die nicht in einer Liste enthalten ist, ist es möglich?

ich denke mit so etwas wie möglich sein kann:

select * 
from tblPrankCalls 
where LEFT(LEN(listitem), country_prefix) not in ('+33', '+379') 

Unter der Annahme, tblPrankCalls umfasst die 4 Ergebnisse oben, würde Ich mag, um zu sehen Frankreich +44 und Gibraltar +350 zurückgegeben.

ich sagen sollte im nicht sicher, ob es möglich ist, weil die Kriterien zu widersprüchlichen Ergebnissen führen könnten (Kratzen noch den Kopf über thatone). Ist es möglich? Gibt es eine weitere gute Vorgehensweise, um Daten in dieser Situation auszuschließen (oder einzuschließen)?

Hinweis: Ich kann RECHTS nicht verwenden, da sich auch die Länge der Telefonnummer ändert.

Edit: Im wirklichen Leben werde ich mehr als 2 Ergebnisse verwenden - sagen wir nur 30 Ergebnisse auf einmal.

Ich glaube auch nicht ein Duplikat davon zu sein:

Phone number lookups using incoming numbers of varying lengths, with or without prefixes

+0

Sie '+ 33' und' + 379' Recht ausschließen möchten? – Sami

+0

Gibt es ein Muster, um die Ländercodes auszuschließen? –

+0

in der Realität würde ich gerne alle auf einem Kontinent ausschließen, sagen Europa zum Beispiel, leider gibt es kein konkretes unheilbares Muster https: //en.wikipedia.org/wiki/Telephone_numbers_in_Europe – User632716

Antwort

0

Hier ist ein allgemeiner Überblick über eine Möglichkeit, dieses Problem zu nähern. Ohne Beispieltabellen, Strukturen und Daten kann ich keinen relevanten Beispielcode bereitstellen.

Schritt 1: Erstellen Sie eine Tabelle (permanent, temp, was auch immer) mit den entsprechenden Präfixen. Stellen Sie fest, ob es sich um eine Liste "Alle einschließen" oder "Alle ausschließen" handelt. Basieren Sie dies auf der Tatsache, dass sich die Vorwahlnummern im Laufe der Zeit ändern können.

Schritt 2: Wie identifizieren Sie das Präfix? Wenn nicht die ersten N Zeichen, dann muss es eine Art Trennzeichen sein, wie + 33-123 oder + 379-456? Stellen Sie sich einen Algorithmus vor, um diesen Wert zu generieren (extrahieren).

Schritt 3: Der obigen Algorithmus verwenden, baut ein Mittel zuverlässig den Präfix-Code extrahiert aus, aber Sie „voll“ Telefon-Codes gespeichert in Ihrer Quelltabelle haben. Idealerweise ist dies eine eigene Spalte in der Tabelle; Im Idealfall verdrahten Sie Ihren Extraktionscode in eine berechnete Spalte auf dem Tisch; Am wenigsten optimal berechnen Sie es jedes Mal neu, wenn Sie diese Abfrage ausführen. Nettoergebnis: Ein Wert pro Zeile in Ihrer Quelltabelle.

Schritt 4: Verwenden Sie eine geeignete Taktik (mehrere unten aufgeführt), verbinden Sie die beiden Tabellen: "TheList", die Quelldatentabelle und "InclusionList/ExclusionList", gewünschte/unerwünschte Präfixe mit Tabelle der etablierten Präfixe). Mehrere Möglichkeiten, dies zu tun:

- Holen Sie sich alle gültigen

…from TheList tl inner join InclusionList il on il.CountryPrefix = tl.CountryPrefix 

…from TheList where CountryPrefix in (select CountryPrefix from InclusionList) 

…from TheList tl where exists (select CountryPrefix from InclusionList where CountryPrefix = tl.CountryPrefix) 

- exlude ungültig

…from TheList tl left outer join ExclusionList el on el.CountryPrefix = tl.CountryPrefix where el.CountryPrefix is not null 

…from TheList where CountryPrefix not in (select CountryPrefix from ExclusionList) 

…from TheList tl where not exists (select CountryPrefix from ExclusionList where CountryPrefix = tl.CountryPrefix)