Find non-ASCII characters in varchar columns using SQL Server

前端 未结 8 1566
遥遥无期
遥遥无期 2020-12-02 14:38

How can rows with non-ASCII characters be returned using SQL Server?
If you can show how to do it for one column would be great.

I am doing something like this

8条回答
  •  春和景丽
    2020-12-02 15:03

    Here is a UDF I built to detectc columns with extended ascii charaters. It is quick and you can extended the character set you want to check. The second parameter allows you to switch between checking anything outside the standard character set or allowing an extended set:

    create function [dbo].[udf_ContainsNonASCIIChars]
    (
    @string nvarchar(4000),
    @checkExtendedCharset bit
    )
    returns bit
    as
    begin
    
        declare @pos int = 0;
        declare @char varchar(1);
        declare @return bit = 0;
    
        while @pos < len(@string)
        begin
            select @char = substring(@string, @pos, 1)
            if ascii(@char) < 32 or ascii(@char) > 126 
                begin
                    if @checkExtendedCharset = 1
                        begin
                            if ascii(@char) not in (9,124,130,138,142,146,150,154,158,160,170,176,180,181,183,184,185,186,192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,209,210,211,212,213,214,216,217,218,219,220,221,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,248,249,250,251,252,253,254,255)
                                begin
                                    select @return = 1;
                                    select @pos = (len(@string) + 1)
                                end
                            else
                                begin
                                    select @pos = @pos + 1
                                end
                        end
                    else
                        begin
                            select @return = 1;
                            select @pos = (len(@string) + 1)    
                        end
                end
            else
                begin
                    select @pos = @pos + 1
                end
        end
    
        return @return;
    
    end
    

    USAGE:

    select Address1 
    from PropertyFile_English
    where udf_ContainsNonASCIIChars(Address1, 1) = 1
    

提交回复
热议问题