将ascii值放入变量中

时间:2014-07-05 09:41:59

标签: sql sql-server sql-server-2008 variables ascii

是否可以将ascii值放入sql server 2008 r2中的变量中?我尝试这段代码:

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 '-------------------------'

但结果如下:

-------------------------   

-------------------------

有什么方法可以解决我的问题吗?

3 个答案:

答案 0 :(得分:2)

使用

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

我不知道为什么你在你的版本中硬编码16

在字符串长度之后尝试提取SUBSTRING返回NULL,这意味着整个连接字符串为NULL

如果你必须这样做,那么另一种方法是在连接之前用空字符串替换NULL

SET @theascii += ISNULL(CONVERT(VARCHAR(3),ASCII(SUBSTRING(@thechars ,@position,1))),'')

答案 1 :(得分:0)

您似乎正在尝试执行以下操作。

注意,我已经包含了Tally \ Numbers表的想法,而不是使用循环。 Tally表通常被认为更具性能。 请阅读它们。

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)

答案 2 :(得分:-1)

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

处理此问题

  

LEN(@thechars)

替换硬编码值

或者

  

处理 NULL :ISNULL(CONVERT(VARCHAR,ASCII(SUBSTRING(@ thechars,@ position,1))),'')

第一个是最好的