How do I remove extended ASCII characters from a string in T-SQL?

前端 未结 5 647
忘了有多久
忘了有多久 2020-11-30 06:00

I need to filter out (remove) extended ASCII characters from a SELECT statement in T-SQL.

I\'m using a stored procedure to do so.

Expected input:

<         


        
5条回答
  •  攒了一身酷
    2020-11-30 06:41

    Thank you for sharing your code.

    I needed something like it, not just for cleaning up e-mail addresses but for general purpose, filtering user web site input before it reaches SAP ERP via integration modules.

    Running in Brazil, it must obey language accents...

    Here goes the resulting code.

    Maybe it can help someone someday, like it did to me.

         IF EXISTS
         (
             SELECT * 
               FROM sys.objects 
              WHERE object_id = OBJECT_ID(N'[dbo].[fnRemoveNonASCII]') 
                AND type IN (N'FN')
         )
             DROP FUNCTION dbo.fnRemoveNonASCII
         GO
    
         CREATE FUNCTION [dbo].[fnRemoveNonASCII] 
         (
             @nstring nvarchar(MAX) 
         )
         RETURNS nvarchar(MAX)
         AS
         BEGIN
    
             DECLARE @nchar nvarchar(1)      -- individual char in string
             DECLARE @nUnicode nvarchar(3)   -- ASCII for individual char in string
             DECLARE @position int           -- subscript to control loop in the string
             DECLARE @Result nvarchar(MAX)   -- return valus
    
             SET @Result = ''
             SET @position = 1
    
             WHILE @position <= LEN(@nstring)
    
                BEGIN
    
                    --Unicode & ASCII are the same from 1 to 255.
                    --Only Unicode goes beyond 255
                    --0 to 31 are non-printable characters
    
                    SET @nchar = SUBSTRING(@nstring, @position, 1)
    
                    SET @nUnicode = UNICODE(@nChar) 
    
                    IF @nUnicode = 10 
                       OR @nUnicode = 13
                       OR @nUnicode BETWEEN 32  AND 126
                       OR @nUnicode = 160
                       OR @nUnicode BETWEEN 192 AND 207
                       OR @nUnicode BETWEEN 210 AND 213
                       OR @nUnicode BETWEEN 217 AND 219
                       OR @nUnicode BETWEEN 224 AND 227
                       OR @nUnicode BETWEEN 231 AND 234
                       OR @nUnicode = 236
                       OR @nUnicode = 237
                       OR @nUnicode BETWEEN 242 AND 245
                       OR @nUnicode = 247
                       OR @nUnicode = 249
                       OR @nUnicode = 250        
    
                       SET @Result = @Result + @nchar
    
                    ELSE IF @nUnicode = 9 -- TAB
                       SET @Result =  @Result + '  '
    
                    ELSE
                       SET @Result =  @Result + ' '
    
                    SET @position = @position + 1
             END
    
             RETURN @Result
         END
    
         /*
         ---------------------------------------------------------------------------------------------------------------
    
         -- Tabela dos caracteres Unicode/ASCII exportáveis
    
         	   |   	      |    %9     =    TAB
         
         |    
          |    %a     =    0A   Line Feed
         
     |    
      |    %d     =    0D   Carriage Return
                |      |   %20 =     
         !     |    !  |   %21 =   !            
         "     |    "  |   %22 =   "            
         #     |    #  |   %23 =   #            
         $     |    $  |   %24 =   $            
         %     |    %  |   %25 =   %            
         &     |    &  |   %26 =   &            
         '     |    '  |   %27 =   '            
         (     |    (  |   %28 =   (            
         )     |    )  |   %29 =   )            
         *     |    *  |   %2a =   *            
         +     |    +  |   %2b =   +            
         ,     |    ,  |   %2c =   ,            
         -     |    -  |   %2d =   -            
         .     |    .  |   %2e =   .            
         /     |    /  |   %2f =   /            
         0     |    0  |   %30 =   0            
         1     |    1  |   %31 =   1            
         2     |    2  |   %32 =   2            
         3     |    3  |   %33 =   3            
         4     |    4  |   %34 =   4            
         5     |    5  |   %35 =   5            
         6     |    6  |   %36 =   6            
         7     |    7  |   %37 =   7            
         8     |    8  |   %38 =   8            
         9     |    9  |   %39 =   9            
         :     |    :  |   %3a =   :            
         ;     |    ;  |   %3b =   ;            
         <     |    <  |   %3c =   <            
         =     |    =  |   %3d =   =            
         >     |    >  |   %3e =   >            
         ?     |    ?  |   %3f =   ?            
         @     |    @  |   %40 =   @   
         A     |    A  |   %41 =   A
         B     |    B  |   %42 =   B
         C     |    C  |   %43 =   C
         D     |    D  |   %44 =   D
         E     |    E  |   %45 =   E
         F     |    F  |   %46 =   F
         G     |    G  |   %47 =   G
         H     |    H  |   %48 =   H
         I     |    I  |   %49 =   I
         J     |    J  |   %4a =   J
         K     |    K  |   %4b =   K
         L     |    L  |   %4c =   L
         M     |    M  |   %4d =   M
         N     |    N  |   %4e =   N
         O     |    O  |   %4f =   O 
         P     |    P  |   %50 =   P
         Q     |    Q  |   %51 =   Q
         R     |    R  |   %52 =   R
         S     |    S  |   %53 =   S
         T     |    T  |   %54 =   T
         U     |    U  |   %55 =   U
         V     |    V  |   %56 =   V
         W     |    W  |   %57 =   W
         X     |    X  |   %58 =   X
         Y     |    Y  |   %59 =   Y
         Z     |    Z  |   %5a =   Z
         [     |    [  |   %5b =   [
         \     |    \  |   %5c =   \
         ]     |    ]  |   %5d =   ]
         ^     |    ^  |   %5e =   ^
         _     |    _  |   %5f =   _
         `     |    `  |   %60 =   `
         a     |    a  |   %61 =   a
         b     |    b  |   %62 =   b
         c     |    c  |   %63 =   c
         d |   d  |   %64 =   d
         e |   e  |   %65 =   e
         f |   f  |   %66 =   f
         g |   g  |   %67 =   g
         h |   h  |   %68 =   h
         i |   i  |   %69 =   i
         j |   j  |   %6a =   j
         k |   k  |   %6b =   k
         l |   l  |   %6c =   l
         m |   m  |   %6d =   m
         n |   n  |   %6e =   n
         o |   o  |   %6f =   o
         p |   p  |   %70 =   p
         q |   q  |   %71 =   q
         r |   r  |   %72 =   r
         s |   s  |   %73 =   s
         t |   t  |   %74 =   t
         u |   u  |   %75 =   u
         v |   v  |   %76 =   v
         w |   w  |   %77 =   w
         x |   x  |   %78 =   x
         y |   y  |   %79 =   y
         z |   z  |   %7a =   z
         { |   {  |   %7b =   {
         | |   |  |   %7c =   |
         } |   }  |   %7d =   }
         ~ |   ~  |   %7e =   ~
           |      |   %a0 =         
         À |   À  |   %c0 =   À
         Á |   Á  |   %c1 =   Á
         Â |   Â  |   %c2 =   Â
         Ã |   Ã  |   %c3 =   Ã
         Ä |   Ä  |   %c4 =   Ä
         Å |   Å  |   %c5 =   Å
         Æ |   Æ  |   %c6 =   Æ
         Ç |   Ç  |   %c7 =   Ç
         È |   È  |   %c8 =   È
         É |   É  |   %c9 =   É
         Ê |   Ê  |   %ca =   Ê
         Ë |   Ë  |   %cb =   Ë
         Ì |   Ì  |   %cc =   Ì
         Í |   Í  |   %cd =   Í
         Î |   Î  |   %ce =   Î
         Ï |   Ï  |   %cf =   Ï
         Ò |   Ò  |   %d2 =   Ò
         Ó |   Ó  |   %d3 =   Ó
         Ô |   Ô  |   %d4 =   Ô
         Õ |   Õ  |   %d5 =   Õ
         Ù |   Ù  |   %d9 =   Ù
         Ú |   Ú  |   %da =   Ú
         Û |   Û  |   %db =   Û
         à |   à  |   %e0 =   à
         á |   á  |   %e1 =   á
         â |   â  |   %e2 =   â
         ã |   ã  |   %e3 =   ã
         ç |   ç  |   %e7 =   ç
         è |   è  |   %e8 =   è
         é |   é  |   %e9 =   é
         ê |   ê  |   %ea =   ê
         ì |   ì  |   %ec =   ì
         í |   í  |   %ed =   í
         ò |   ò  |   %f2 =   ò
         ó |   ó  |   %f3 =   ó
         ô |   ô  |   %f4 =   ô
         õ |   õ  |   %f5 =   õ
         ÷ |   ÷  |   %f7 =   ÷
         ù |   ù  |   %f9 =   ù
         ú |   ú  |   %fa =   ú
         */
    
         GO     
    

提交回复
热议问题