Posted by: codeproject | September 18, 2007

Sql Server Tips – Removing or Replacing non-alphanumeric characters in strings

–Create a table with all bad codes

DECLARE @mycode INT
CREATE
TABLE #badcodes(badcode INT)
SET @mycode=33
WHILE @mycode<=255
BEGIN
IF (@mycode BETWEEN 33 AND 47) OR (@mycode BETWEEN 58 AND 64)
OR (@mycode BETWEEN 58 AND 64) OR (@mycode BETWEEN 91 AND 96)
OR (@mycode BETWEEN 123 AND 255)

INSERT INTO #BADCODES VALUES(@mycode)

SET @mycode=@mycode+1
END
GO– Suppose you have a @test variable containing bad codes

DECLARE @test VARCHAR(100)
SET @test=‘se+*ar%c&h^da#tab~se’
–Below command will replace bad codes with empty string.UPDATE #badcodes
SET @test=REPLACE(@test,CHAR(badcode),)
PRINT @test



Responses

  1. Wonderful. Pls keep me updated with your latest techniques. It really help me with my project.
    Good luck. I’m looking forward to your next posting.

  2. Thanks so much – Perfect! I’m just past the newbie stage of Transact-SQL and still learning. Can you please explain how the replace “knows” how to look at every badcode row in the table ? That’s a very powerful capability that would not be obvious from the Transact-SQL definition of REPLACE.

    -JC

  3. I will make it clear to you that first I created a temp table and insert all the special characters in it.

    IF (@mycode BETWEEN 33 AND 47) OR (@mycode BETWEEN 58 AND 64)
    OR (@mycode BETWEEN 58 AND 64) OR (@mycode BETWEEN 91 AND 96)
    OR (@mycode BETWEEN 123 AND 255)

    with this condition it will only let special character insert in a temp table.

    In replace function I am using CHAR( function this will return Character code of the any alphabetic.

    If you have any confusion do write me.

    Rana

  4. your code doesn’t work when the string contains the letters TH together. try CLOTH or MONTH

    Bizzare

  5. Mr. bizarre
    It works fine, below is the example code for you.

    DECLARE @mycode INT
    CREATE TABLE #badcodes(badcode INT)
    SET @mycode=33
    WHILE @mycode<=255
    BEGIN
    IF (@mycode BETWEEN 33 AND 47) OR (@mycode BETWEEN

    58 AND 64)
    OR (@mycode BETWEEN 58 AND 64) OR (@mycode BETWEEN

    91 AND 96)
    OR (@mycode BETWEEN 123 AND 255)
    INSERT INTO #BADCODES VALUES(@mycode)

    SET @mycode=@mycode+1
    END
    GO
    – Suppose you have a @test variable containing bad codes

    DECLARE @test VARCHAR(100)
    SET @test=’MONTH’
    –Below command will replace bad codes with empty string.

    UPDATE #badcodes
    SET @test=REPLACE(@test,CHAR(badcode),”)
    PRINT @test

    DECLARE @test VARCHAR(100)
    SET @test=’CLOTH’

    –Below command will replace bad codes with empty string.
    UPDATE #badcodes
    SET @test=REPLACE(@test,CHAR(badcode),”)
    PRINT @test

  6. Nice Logic.

    Thank you.

  7. Hi,

    Using your logic I have created a function named IsAlphaNumeric which returns 0 for Alpha-Numeric chars and 1 for non-alphanumeric chars.

    Thanks again.

  8. I have this as the input string +91-22-677980002.
    Using your logic I get 96779800. Please advice.

  9. Found it…..its actually 1,2 and 3 are present as superscript/exponent number too hance we need to exclude their codes 179,180,185. I hope this adds more spice to your already good logic :)

  10. Nope… Bizzare is correct.

    “your code doesn’t work when the string contains the letters TH together. try CLOTH or MONTH”

  11. [...] came across an elegant solution, putting character codes into a static table (Utility.CharCode in this case) within your database. [...]

  12. [...] eine Tabelle anlegen – wie z.B. hier: Strim Strips Out Non-Alphanumeric Characters oder hier: Sql Server Tips – Removing or Replacing non-alphanumeric characters in strings [...]

  13. That was a great piece of code! I love it when programmers really think outside of the box and come-up with that short and sweet piece of miracle code.

    Nice job!


Leave a response

Your response:

Categories