显示字符串中每个字符的ASCII码
Show the ASCII code of each character in a string
在T-SQL中,如何显示字符串中每个字符的ASCII码?
字符串示例:
Adrs_line1
ABCD
我想展示这个:
Adrs_line1_ASCII
65|66|67|68
目前,我这样做(我手动增加数字):
ASCII(SUBSTRING(Adrs_line1, 1, 1))
这样做的全部目的是找出哪个字符破坏了一个地址。
因为此代码不适用于 5% 的地址:
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 3) as Adrs_line1,
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 2) as Adrs_line2,
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 1) as Adrs_line3,
编辑:
有关我的问题的更多信息:
在我们的 ERP 中,地址以 return 回车符显示(第 1 行、第 2 行和第 3 行)。但是在数据库中,这三行连接在一个字符串中。因此,我必须通过检测执行 return 回车的字符来分隔三行。通常是 char(10) 或 char(13),但对于 5% 的地址,它是另一个我无法手动找到的字符。
这里有一些您可以使用和改编的东西。
创建一个 table-valued 函数,它将 return 任何被视为“坏”的字符:
create or alter function dbo.FindBadAscii (@v varchar(max))
returns table as
return
select v [Char], Ascii(v) [Ascii]
from (
select top (Len(@v)) Row_Number() over(order by (select null)) n
from master.dbo.spt_values
) d
cross apply(values(Substring(@v, d.n, 1)))x(v)
where Ascii(v)<32 and Ascii(v) not in (9,10,13)
然后您可以像这样测试它:
select * from dbo.FindBadAscii ('a' + Char(10) + 'b' + Char(20) + 'c')
这标识任何不是 tab/lf/cr
的“控制”字符
结果
20
在T-SQL中,如何显示字符串中每个字符的ASCII码?
字符串示例:
Adrs_line1
ABCD
我想展示这个:
Adrs_line1_ASCII
65|66|67|68
目前,我这样做(我手动增加数字):
ASCII(SUBSTRING(Adrs_line1, 1, 1))
这样做的全部目的是找出哪个字符破坏了一个地址。 因为此代码不适用于 5% 的地址:
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 3) as Adrs_line1,
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 2) as Adrs_line2,
PARSENAME(REPLACE(REPLACE(ADDRESSSTREET, CHAR(13), ''), CHAR(10), '.'), 1) as Adrs_line3,
编辑:
有关我的问题的更多信息:
在我们的 ERP 中,地址以 return 回车符显示(第 1 行、第 2 行和第 3 行)。但是在数据库中,这三行连接在一个字符串中。因此,我必须通过检测执行 return 回车的字符来分隔三行。通常是 char(10) 或 char(13),但对于 5% 的地址,它是另一个我无法手动找到的字符。
这里有一些您可以使用和改编的东西。
创建一个 table-valued 函数,它将 return 任何被视为“坏”的字符:
create or alter function dbo.FindBadAscii (@v varchar(max))
returns table as
return
select v [Char], Ascii(v) [Ascii]
from (
select top (Len(@v)) Row_Number() over(order by (select null)) n
from master.dbo.spt_values
) d
cross apply(values(Substring(@v, d.n, 1)))x(v)
where Ascii(v)<32 and Ascii(v) not in (9,10,13)
然后您可以像这样测试它:
select * from dbo.FindBadAscii ('a' + Char(10) + 'b' + Char(20) + 'c')
这标识任何不是 tab/lf/cr
的“控制”字符结果
20