Search code examples
sqlsql-servert-sqlreplacepunctuation

SQL Server: How do you remove punctuation from a field?


Any one know a good way to remove punctuation from a field in SQL Server?

I'm thinking

UPDATE tblMyTable SET FieldName = REPLACE(REPLACE(REPLACE(FieldName,',',''),'.',''),'''' ,'')

but it seems a bit tedious when I intend on removing a large number of different characters for example: !@#$%^&*()<>:"

Thanks in advance


Solution

  • Ideally, you would do this in an application language such as C# + LINQ as mentioned above.

    If you wanted to do it purely in T-SQL though, one way make things neater would be to firstly create a table that held all the punctuation you wanted to removed.

    CREATE TABLE Punctuation 
    (
        Symbol VARCHAR(1) NOT NULL
    )
    
    INSERT INTO Punctuation (Symbol) VALUES('''')
    INSERT INTO Punctuation (Symbol) VALUES('-')
    INSERT INTO Punctuation (Symbol) VALUES('.')
    

    Next, you could create a function in SQL to remove all the punctuation symbols from an input string.

    CREATE FUNCTION dbo.fn_RemovePunctuation
    (
        @InputString VARCHAR(500)
    )
    RETURNS VARCHAR(500)
    AS
    BEGIN
        SELECT
            @InputString = REPLACE(@InputString, P.Symbol, '')
        FROM 
            Punctuation P
    
        RETURN @InputString
    END
    GO
    

    Then you can just call the function in your UPDATE statement

    UPDATE tblMyTable SET FieldName = dbo.fn_RemovePunctuation(FieldName)