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.

War es hilfreich?

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

gezeigt

d. 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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top