Removing nonnumerical data out of a number + SQL

前端 未结 5 1893
深忆病人
深忆病人 2021-01-21 06:06

I\'m trying find the best way to remove nonnumerical data from a varchar in SQL e.g.

\'(082) 000-0000\' to \'0820000000\' or
\'+2782 000 0000\' to \'0820000000\'         


        
5条回答
  •  野性不改
    2021-01-21 06:52

    If you're using SQL Server 2005 or newer then your best option is to create a user-defined CLR function and use a regular expression to remove all non-numeric characters.

    If you don't want to use a CLR function then you could create a standard user-defined function. This will do the job although it won't be as efficient:

    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
    

    And then select from your table like so:

    SELECT dbo.RemoveNonNumerics(your_column) AS your_tidy_column
    FROM your_table
    

提交回复
热议问题