T SQL 从 SELECT 中删除 ASCII 字符
T SQL Remove ASCII character from SELECT
我正在使用 SQL Server 2014。
我有下面的 SQL 语句来查找不匹配的记录。但是,它现在可以正常工作,因为 OPENQUERY 中的字段 'dsc' 实际上在字符串值之前包含一个水平制表符(ASCII 字符 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 字符 009?我试过 LTRIM 没有用。
谢谢。
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
我正在使用 SQL Server 2014。
我有下面的 SQL 语句来查找不匹配的记录。但是,它现在可以正常工作,因为 OPENQUERY 中的字段 'dsc' 实际上在字符串值之前包含一个水平制表符(ASCII 字符 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 字符 009?我试过 LTRIM 没有用。
谢谢。
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