T SQL Удалить символ ASCII из SELECT

Я использую SQL Server 2014.

У меня есть приведенный ниже оператор SQL, чтобы найти непревзойденные записи. Однако теперь он работает правильно, поскольку поле «dsc» в OPENQUERY фактически содержит горизонтальную вкладку (ASCII-символ 009) перед строковыми значениями:

SELECT [E_Code]
FROM [Person] P
WHERE P.E_Code NOT IN (
        SELECT dsc
        FROM OPENQUERY(svr01, 'select "dsc" from TST.eth')
        )

Как удалить символ ASCII 009 из поля dsc? Я пробовал LTRIM безрезультатно.

Спасибо.


person Michael    schedule 17.12.2019    source источник
comment
вы можете использовать подстроку.   -  person Cetin Basoz    schedule 17.12.2019
comment
Отвечает ли это на ваш вопрос? Как удалить расширенный ASCII символов из строки в T-SQL?   -  person Amira Bedhiafi    schedule 17.12.2019
comment
@xXx извините, нет. Я создал функцию и вижу ее, но когда я пытаюсь ее запустить, я просто получаю: «RemoveNonASCII» не является распознанным именем встроенной функции.   -  person Michael    schedule 17.12.2019


Ответы (2)


Измените максимальную рекурсию и создайте следующее

    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 будет возвращен

person Alex Valentine    schedule 14.04.2020
comment
небольшое объяснение вашего кода будет очень полезно - person 32cupo; 14.04.2020
comment
Я признаю, что это могло бы быть чище. Используя рекурсивный cte, вы можете идентифицировать символы, которые хотите исключить, в данном случае все, что не является расширенным набором символов, единственным ограничением является максимальный размер рекурсивного cte 32767. - person Alex Valentine; 15.04.2020
comment
Подразумевается, что все, что является расширенным набором символов, будет удалено. - person Alex Valentine; 15.04.2020

person    schedule
comment
спасибо, но как это поможет моему первоначальному вопросу? - person Michael; 18.12.2019