T SQL从SELECT中删除ASCII字符

T SQL从SELECT中删除ASCII字符,sql,sql-server,tsql,openquery,notin,Sql,Sql Server,Tsql,Openquery,Notin,我正在使用SQL Server 2014 我使用下面的SQL语句查找不匹配的记录。但是,它现在工作正常,因为OPENQUERY中的字段“dsc”实际上在字符串值之前包含一个水平选项卡(ASCII char 009): SELECT [E_Code] FROM [Person] P WHERE P.E_Code NOT IN ( SELECT dsc FROM OPENQUERY(svr01, 'select "dsc" from TST.eth')

我正在使用SQL Server 2014

我使用下面的SQL语句查找不匹配的记录。但是,它现在工作正常,因为OPENQUERY中的字段“dsc”实际上在字符串值之前包含一个水平选项卡(ASCII char 009):

SELECT [E_Code]
FROM [Person] P
WHERE P.E_Code NOT IN (
        SELECT dsc
        FROM OPENQUERY(svr01, 'select "dsc" from TST.eth')
        )
如何从dsc字段中删除ASCII char 009?我试过LTRIM,但没有用


谢谢。

DECLARE@str VARCHAR(20)=CONCAT('这是一个选项卡-->','改变max递归并创建以下内容

DECLARE @str VARCHAR(20) = CONCAT('This is a tab--> ', '<--');
SELECT @str, REPLACE(@str, CHAR(9), '');


SELECT [E_Code]
FROM [Person] P
WHERE P.E_Code NOT IN (
        SELECT REPLACE(dsc, CHAR(9), '')
        FROM OPENQUERY(svr01, 'select "dsc" from TST.eth')
    )
    Create Function dbo.ASCIICleaner(@inputstring nvarchar(max))
    Returns nvarchar(max)
    BEGIN
    Declare @returnValue nvarchar(max) = '';
    with lengths as 
    (
        select @inputstring data, len(@inputstring) length,1 start
    )

    ,recurv as 
    (
        select data,length,UNICODE(substring(data,start,1)) chari ,start from lengths where start= 1
        union all
        select  data,length,UNICODE(substring(data,start+1,1)),start+1 from recurv where length > start
    )

    select @returnValue+= char(chari) 
    from recurv 
    where chari between 32 and 127
    order by start asc

    return @returnValue

    END


    select dbo.ASCIICleaner('aËbËcËDËEËF')

abcDEF将被返回

您可以使用substring。这是否回答了您的问题?@xXx抱歉,否。我创建了该函数并可以看到它,但当我尝试运行它时,我只收到:“RemoveNonASCII”不是一个可识别的内置函数名。谢谢,但这对我最初的问题有何帮助?对您的代码进行一点解释将非常有帮助。我会它可能更干净,通过使用递归cte,您可以识别要排除的字符,在这种情况下,任何非扩展字符集的字符,唯一的限制是递归cte的最大大小为32767。也就是说,任何扩展字符集的字符都将被删除。