显示字符串中每个字符的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