Entfernen von nicht-numerischen Daten aus einer Reihe + SQL
-
08-07-2019 - |
Frage
Ich versuche, den besten Weg finden, um nicht-numerische Daten aus einer varchar in SQL beispiel zu entfernen.
'(082) 000-0000' to '0820000000' or
'+2782 000 0000' to '0820000000'
Die Schwierigkeit ist, ich bin nicht immer sicher, welche Zahlenformate in kommen, wie oben gezeigt, so mag ich mag alles, das im Wesentlichen keine Zahl entfernt ist.
Update:
Von dem, was euch gesagt haben, ist dies ein wenig Spitze getan:
declare @Num varchar(20)
set @Num = ' + (82) 468 6152 '
--strip nonnumrical data out of @num
print @Num
set @Num = replace(@Num, ' ', '')
set @Num = replace(@Num, '+', '')
set @Num = replace(@Num, '-', '')
set @Num = replace(@Num, '(', '')
set @Num = replace(@Num, ')', '')
print @Num
kann nicht ersetzen [^ 0-9] Ausdruck richtig machen though.
Lösung
Wenn Sie SQL Server 2005 verwenden oder neuer als die beste Wahl ist, ein benutzerdefinierte CLR-Funktion und verwenden Sie einen regulären Ausdruck alle nicht-numerischen Zeichen zu entfernen.
Wenn Sie eine CLR-Funktion nicht verwenden Sie dann wollen Sie eine Standard-benutzerdefinierte Funktion erstellen können. Dadurch wird die Arbeit erledigen, obwohl es nicht so effizient sein wird:
CREATE FUNCTION dbo.RemoveNonNumerics(@in VARCHAR(255))
RETURNS VARCHAR(255)
AS
BEGIN
DECLARE @out VARCHAR(255)
IF (@in IS NOT NULL)
BEGIN
SET @out = ''
WHILE (@in <> '')
BEGIN
IF (@in LIKE '[0-9]%')
SET @out = @out + SUBSTRING(@in, 1, 1)
SET @in = SUBSTRING(@in, 2, LEN(@in) - 1)
END
END
RETURN(@out)
END
Und dann wählen Sie aus Ihrer Tabelle wie folgt:
SELECT dbo.RemoveNonNumerics(your_column) AS your_tidy_column
FROM your_table
Andere Tipps
Hier finden Sie aktuelle diesen Beitrag (es ist die achte Post nach unten - dem ersten lang), die beschreibt, wie reguläre Ausdrücke in SQL Server verwenden. Es ist nicht das schnellste (das wäre es tun, bevor Sie zu SQL bekommen), aber es gibt eine anständige Art und Weise, es zu tun.
Es gibt verschiedene Optionen für diese, je nach DBMS.
Für T-SQL, Link hat einige gute Ansätze.
Es ist viel einfacher String-Parsing in Ihrer Business-Schicht zu behandeln. Jedoch baring, dass der T-SQL replace () Funktion (unter der Annahme, MS SQL) benutzen.
Sie können mit dieser Funktion auf dem Parameter eine Schleife tun, die übergeben wurde, um alle nicht-numerischen Buchstaben aus ihm zu entfernen.
Welcher Geschmack von SQL-Backend verwenden Sie? Wenn es eine REGEXP_REPLACE Art von Funktion ist, könnten Sie verwenden, zu ersetzen [^ 0-9] mit nichts.
Die effektivste und flexibel, dass ich gefunden habe, ist die Zahlen / tally Tabellenmethode, wie in mwigdahl Antwort auf 10. März 2009
gezeigtd. eine Zulassungsliste ist viel sicherer als die do-not-Zulassungsliste, die Sie in der Unterseite Ihrer Frage oben gesetzt worden.
Was haben Sie nicht angegeben ist, wie Sie Nicht-Zahlen umgehen ... was tun Sie mit Dezimalstellen?