Sql 将ascii值放入变量中

Sql 将ascii值放入变量中,sql,sql-server,sql-server-2008,variables,ascii,Sql,Sql Server,Sql Server 2008,Variables,Ascii,在sql server 2008 r2中是否可以将ascii值放入变量中?我正在尝试以下代码: declare @thechars varchar(15) declare @theascii varchar(50) declare @position int set @thechars = 'somechar' set @theascii = '' set @position = 1 while(@position<16) begin set @theascii = @theas

在sql server 2008 r2中是否可以将ascii值放入变量中?我正在尝试以下代码:

declare @thechars varchar(15)
declare @theascii varchar(50)
declare @position int

set @thechars = 'somechar'
set @theascii = ''
set @position = 1

while(@position<16)
begin
   set @theascii = @theascii+convert(varchar,ascii(substring(@thechars ,@position,1)))
   set @position = @position + 1
end

print '-------------------------'
print 'the ascii is ' + @theascii 
print '-------------------------'
有什么办法解决我的问题吗?

使用

while(@position <= LEN(@thechars))

看起来你正试图做下面这样的事情

注意,我加入了理货\数字表的概念,而不是使用循环。 理货台通常被认为性能更高。 请仔细阅读他们的情况

DECLARE  @InputText     VARCHAR(50)     = 'Hello, world!'
        ,@ASCIIString   VARCHAR(200)    = ''


;WITH TallyCTE (n) AS
--  You may want to create a physical Tally table - Google & read up!
(
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
    FROM syscolumns
)
SELECT @ASCIIString = @ASCIIString + CAST(ASCII(SUBSTRING(@InputText, n, 1)) AS VARCHAR) + ', '
FROM TallyCTE
WHERE n <= LEN(@InputText)


PRINT 'The ASCII lookup values are; ' + LEFT(@ASCIIString, LEN(@ASCIIString)-1)

不要硬编码WHILE循环中的长度。有时,给定的输入长度可能超过您的硬编码值。但是你仍然会得到一些输出。如果长度小于该值,则将得到空值。如果使用“SELECT”语句而不是PRINT,则输出结果将为NULL

处理这个问题

将硬编码值替换为LEN@thechars

句柄NULL:ISNULLCONVERT VARCHAR,ASCIISUBSTRING@thechars,@位置,1


第一种方法是最好的

要解决问题,请在循环中输出一些值,这样您就可以看到发生了什么。您可能需要另一种方法,例如XML PATHTrue,但该过程可以修改为显示每个字符的每个ascii查找代码,从而使排序变得不必要。它不能保证工作,有时甚至在看不到order by的情况下也不能工作。这与我9小时前提出的两点有何不同?抱歉,我使用了移动设备。滚动时跳过您的答案。只是看到了你的答案。你的解释很好。啊,好的。谢谢你的解释,谢谢。它起作用了。我想我应该试着从现在开始不要硬编码我的程序。
SET @theascii += ISNULL(CONVERT(VARCHAR(3),ASCII(SUBSTRING(@thechars ,@position,1))),'')
DECLARE  @InputText     VARCHAR(50)     = 'Hello, world!'
        ,@ASCIIString   VARCHAR(200)    = ''


;WITH TallyCTE (n) AS
--  You may want to create a physical Tally table - Google & read up!
(
    SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
    FROM syscolumns
)
SELECT @ASCIIString = @ASCIIString + CAST(ASCII(SUBSTRING(@InputText, n, 1)) AS VARCHAR) + ', '
FROM TallyCTE
WHERE n <= LEN(@InputText)


PRINT 'The ASCII lookup values are; ' + LEFT(@ASCIIString, LEN(@ASCIIString)-1)