![]() |
Re: Schöne Grüße, Jens
Zitat:
SQL-Code:
Dumm ist das ich hiermit ...
CREATE FUNCTION SYSF_GetSplittedTelNumber (@TelNr VARCHAR(25) )
RETURNS VARCHAR(25) AS BEGIN DECLARE @TestVorwahl VARCHAR(25) DECLARE @Dummy VARCHAR(25) DECLARE @TempResult VARCHAR(25) SET @TestVorwahl = @TelNr NeueSuche: SELECT @Dummy=Vorwahl FROM SYSF_Vorwahlen() WHERE Vorwahl= @Testvorwahl IF @@ROWCOUNT=0 AND LEN(@TestVorwahl)>0 BEGIN SET @TestVorwahl=LEFT(@TestVorwahl,Len(@TestVorwahl)-1) GOTO NeueSuche END SET @TempResult= @TestVorwahl+'-'+RIGHT(@TelNr,LEN(@TelNr)-LEN(@TestVorwahl)) IF LEFT(@TempResult,1)='-' SET @TempResult=RIGHT(@TempResult,LEN(@TempResult)-1) RETURN @TempResult END
SQL-Code:
... im Extremfall 15 TableScans in der Vorwahlentabelle mache ...
NeueSuche:
SELECT @Dummy=Vorwahl FROM SYSF_Vorwahlen() WHERE Vorwahl= @Testvorwahl IF @@ROWCOUNT=0 AND LEN(@TestVorwahl)>0 BEGIN SET @TestVorwahl=LEFT(@TestVorwahl,Len(@TestVorwahl)-1) GOTO NeueSuche END Die Funktion läuft im Moment ca. 0,5 Sekunden bei 100% CPU Costs ... Die Rufnummern werden getrennt gespeichert. Um die Rufnummer, egal wie sie kommt, trennen zu können, brauche ich die oben beschriebene Funktion ... |
Re: Telefonnummern Trennen in Vorwahl-Rufnummer mit TSQL
@SirThornberry
Für Delphi wäre das eine brauchbare Lösung, aber ich importiere die Daten über T-SQL direkt auf dem SQL-Server. Das Programm schupst nur eine Stored Procedure in der DB an und die Daten sind in der Kundentabelle ... Schöne Grüße, Jens :hi: |
Re: Telefonnummern Trennen in Vorwahl-Rufnummer mit TSQL
Hallo Jens,
in T-SQL musst du die ONKZ-Tabelle mit einem less-than Vergleich an deiner normierten Nummer zerlegen, die Ordnung des Zwischenergebnisses umkehren und mit TOP 1 greifst du dann auf die korrekte Vorwahl zu. Grüße vom marabu |
Re: Telefonnummern Trennen in Vorwahl-Rufnummer mit TSQL
Zitat:
Die Funktion läuft aber immer noch 0,4 bis 0,45 Sekunden. Ich füge hier mal den Code ein, falls jemand mal Bedarf, oder Optimierungsvorschläge hat :angel2:
SQL-Code:
CREATE FUNCTION SYSF_GetSplittedTelNumber (@TelNr VARCHAR(25) )
RETURNS VARCHAR(25) AS BEGIN DECLARE @TestVorwahl VARCHAR(25) DECLARE @TempResult VARCHAR(25) IF @TelNr IS NULL OR LTRIM(@TelNr) ='' BEGIN SET @TempResult = '' END ELSE BEGIN SET @TelNr = REPLACE (@TelNr,'-','') SET @TelNr = REPLACE (@TelNr,' ','') SET @TelNr = REPLACE (@TelNr,'/','') SET @TelNr = REPLACE (@TelNr,'(','') SET @TelNr = REPLACE (@TelNr,')','') SET @TelNr = REPLACE (@TelNr,'_','') SET @TelNr = REPLACE (@TelNr,'+','') SET @TelNr = REPLACE (@TelNr,'\','') SET @TelNr = REPLACE (@TelNr,'"','') SET @TelNr = REPLACE (@TelNr,'.','') SET @TelNr = REPLACE (@TelNr,':','') SET @TelNr = REPLACE (@TelNr,'*','') SET @TelNr = REPLACE (@TelNr,'#','') SET @TelNr = REPLACE (@TelNr,'p','') SET @TelNr = REPLACE (@TelNr,'P','') SET @TelNr = REPLACE (@TelNr,',','') SET @TestVorwahl = @TelNr SELECT TOP 1 @Testvorwahl=Vorwahl FROM SYSF_Vorwahlen() WHERE Vorwahl< @Testvorwahl ORDER BY Vorwahl DESC SET @TempResult= @TestVorwahl+'-'+RIGHT(@TelNr,LEN(@TelNr)-LEN(@TestVorwahl)) IF LEFT(@TempResult,1)='-' SET @TempResult=RIGHT(@TempResult,LEN(@TempResult)-1) END RETURN @TempResult END Schöne Grüße, Jens :hi: |
Re: Telefonnummern Trennen in Vorwahl-Rufnummer mit TSQL
Zitat:
SQL-Code:
Was, wenn in der TelNr ein 'X' steht, das wird nicht berücksichtigt. Also statt einzelne Zeichen zu entfernen, wieso sorgst du nicht dafür, dass du nur die Ziffern betrachtest.
SET @TelNr = REPLACE (@TelNr,'-','')
SET @TelNr = REPLACE (@TelNr,' ','') SET @TelNr = REPLACE (@TelNr,'/','') SET @TelNr = REPLACE (@TelNr,'(','') SET @TelNr = REPLACE (@TelNr,')','') SET @TelNr = REPLACE (@TelNr,'_','') SET @TelNr = REPLACE (@TelNr,'+','') SET @TelNr = REPLACE (@TelNr,'\','') SET @TelNr = REPLACE (@TelNr,'"','') SET @TelNr = REPLACE (@TelNr,'.','') SET @TelNr = REPLACE (@TelNr,':','') SET @TelNr = REPLACE (@TelNr,'*','') SET @TelNr = REPLACE (@TelNr,'#','') SET @TelNr = REPLACE (@TelNr,'p','') SET @TelNr = REPLACE (@TelNr,'P','') SET @TelNr = REPLACE (@TelNr,',','') Und wie in ![]() |
Re: Telefonnummern trennen in Vorwahl-Rufnummer mit TSQL
Die akuelle Funktion schieht bei mit so aus ...
Sie ist relativ schnell und läuft stabil ...
SQL-Code:
Wichtig ist auch, das man prüft, ob die Rufnummer überhaupt mit der gefundenen Vorwahl beginnt. Sonst gibt es bei ungültigen Rufnummern(die nicht mit einer gültigen Vorwahl anfangen) "Zahlensalat", weil einfach die nächst kleinere Vorwahl zurückgegeben wird.
CREATE FUNCTION SYSF_GetSplittedTelNumber (@TelNr VARCHAR(25) )
RETURNS VARCHAR(25) AS BEGIN DECLARE @TestVorwahl VARCHAR(25) DECLARE @Dummy VARCHAR(25) DECLARE @TempResult VARCHAR(25) SET @TelNr = REPLACE (@TelNr,'-','') SET @TelNr = REPLACE (@TelNr,' ','') SET @TelNr = REPLACE (@TelNr,'/','') SET @TelNr = REPLACE (@TelNr,'(','') SET @TelNr = REPLACE (@TelNr,')','') SET @TelNr = REPLACE (@TelNr,'_','') SET @TelNr = REPLACE (@TelNr,'+','') SET @TelNr = REPLACE (@TelNr,'\','') SET @TelNr = REPLACE (@TelNr,'"','') SET @TelNr = REPLACE (@TelNr,'.','') SET @TelNr = REPLACE (@TelNr,':','') SET @TelNr = REPLACE (@TelNr,'*','') SET @TelNr = REPLACE (@TelNr,'#','') SET @TelNr = REPLACE (@TelNr,'@','') SET @TelNr = REPLACE (@TelNr,'%','') SET @TelNr = REPLACE (@TelNr,'¦','') SET @TelNr = REPLACE (@TelNr,'$','') SET @TelNr = REPLACE (@TelNr,'&','') SET @TelNr = REPLACE (@TelNr,',','') SET @TelNr = REPLACE (@TelNr,'-','') SET @TelNr = REPLACE (@TelNr,'/','') SET @TelNr = REPLACE (@TelNr,'(','') SET @TelNr = REPLACE (@TelNr,')','') SET @TelNr = REPLACE (@TelNr,'a','') SET @TelNr = REPLACE (@TelNr,'b','') SET @TelNr = REPLACE (@TelNr,'c','') SET @TelNr = REPLACE (@TelNr,'d','') SET @TelNr = REPLACE (@TelNr,'e','') SET @TelNr = REPLACE (@TelNr,'f','') SET @TelNr = REPLACE (@TelNr,'g','') SET @TelNr = REPLACE (@TelNr,'h','') SET @TelNr = REPLACE (@TelNr,'i','') SET @TelNr = REPLACE (@TelNr,'j','') SET @TelNr = REPLACE (@TelNr,'k','') SET @TelNr = REPLACE (@TelNr,'l','') SET @TelNr = REPLACE (@TelNr,'m','') SET @TelNr = REPLACE (@TelNr,'n','') SET @TelNr = REPLACE (@TelNr,'o','') SET @TelNr = REPLACE (@TelNr,'p','') SET @TelNr = REPLACE (@TelNr,'q','') SET @TelNr = REPLACE (@TelNr,'r','') SET @TelNr = REPLACE (@TelNr,'s','') SET @TelNr = REPLACE (@TelNr,'t','') SET @TelNr = REPLACE (@TelNr,'u','') SET @TelNr = REPLACE (@TelNr,'v','') SET @TelNr = REPLACE (@TelNr,'w','') SET @TelNr = REPLACE (@TelNr,'x','') SET @TelNr = REPLACE (@TelNr,'y','') SET @TelNr = REPLACE (@TelNr,'z','') SET @TelNr = REPLACE (@TelNr,'A','') SET @TelNr = REPLACE (@TelNr,'B','') SET @TelNr = REPLACE (@TelNr,'C','') SET @TelNr = REPLACE (@TelNr,'D','') SET @TelNr = REPLACE (@TelNr,'E','') SET @TelNr = REPLACE (@TelNr,'F','') SET @TelNr = REPLACE (@TelNr,'G','') SET @TelNr = REPLACE (@TelNr,'H','') SET @TelNr = REPLACE (@TelNr,'I','') SET @TelNr = REPLACE (@TelNr,'J','') SET @TelNr = REPLACE (@TelNr,'K','') SET @TelNr = REPLACE (@TelNr,'L','') SET @TelNr = REPLACE (@TelNr,'M','') SET @TelNr = REPLACE (@TelNr,'N','') SET @TelNr = REPLACE (@TelNr,'O','') SET @TelNr = REPLACE (@TelNr,'P','') SET @TelNr = REPLACE (@TelNr,'Q','') SET @TelNr = REPLACE (@TelNr,'R','') SET @TelNr = REPLACE (@TelNr,'S','') SET @TelNr = REPLACE (@TelNr,'T','') SET @TelNr = REPLACE (@TelNr,'U','') SET @TelNr = REPLACE (@TelNr,'V','') SET @TelNr = REPLACE (@TelNr,'W','') SET @TelNr = REPLACE (@TelNr,'X','') SET @TelNr = REPLACE (@TelNr,'Y','') SET @TelNr = REPLACE (@TelNr,'Z','') IF @TelNr IS NULL OR LEN(LTRIM(@TelNr))<4 BEGIN SET @TempResult = '' END ELSE BEGIN SET @TestVorwahl = @TelNr SELECT TOP 1 @Testvorwahl=Vorwahl FROM SYSF_Vorwahlen() WHERE Vorwahl< @Testvorwahl ORDER BY Vorwahl DESC SET @Testvorwahl = ISNULL(@Testvorwahl,'') IF LEFT(@TelNr,LEN(@Testvorwahl))<>@Testvorwahl SET @Testvorwahl='' SET @TempResult= @TestVorwahl+'-'+RIGHT(@TelNr,LEN(@TelNr)-LEN(@TestVorwahl)) IF LEFT(@TempResult,1)='-' SET @TempResult=RIGHT(@TempResult,LEN(@TempResult)-1) END RETURN @TempResult END Zitat:
Wie geht das ? Schöne Grüße, Jens :hi: |
Re: Telefonnummern trennen in Vorwahl-Rufnummer mit TSQL
Zitat:
SQL-Code:
set @Dummy = @TelNr
set @TelNr = '' set @N = len(@Dummy) set @i = 1 while @i <= @N BEGIN if substring (@Dummy,@i,@N) between '0' and '9' BEGIN set @TelNr = @TelNr + substring(@Dummy,@i,@N) END END EDIT: Wieso ist hier die Variable Dummy fett geschrieben :gruebel: |
Re: Telefonnummern trennen in Vorwahl-Rufnummer mit TSQL
Zitat:
Weil "Dummy" zu den reservierten Schlüsselwörtern von T-SQL gehört! Genau so wie "ADD", "ALL", "AlTER"... naja guckt lieber selber in der T-SQL-Hilfe nach. Schönen Gruß Robert |
Re: Telefonnummern trennen in Vorwahl-Rufnummer mit TSQL
Zitat:
|
Re: Telefonnummern trennen in Vorwahl-Rufnummer mit TSQL
@Jelly
Ich denke einfach, dass die DP-Scripts nach diesen Schlüsselwörtern suchen und diese unabhänigig von der davorstehenden Variablendeklaration "@" blau markieren. Befindet man sich aber im SQL Server Query Analyzer so gibt eine einen Unterschied zwischen "@dummy" und "dummy". Ersteres ist schwarz, zweiteres blau gefärbt. Also ist sicher auch für die Zukunft nichts gegen einzuwenden. Schönen Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz