Setzen Sie den Ascii-Wert in eine Variable

Ist es verfügbar, um ascii Werte in Variable in SQL server 2008 r2 setzen? Ich versuche diesen Code:

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

aber das Ergebnis genau so:

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

Gibt es irgendeine Möglichkeit, mein Problem zu lösen?

Benutzen

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

Ich habe keine Ahnung, warum du harten Code 16 in deiner Version hast.

Versuchen, ein SUBSTRING zu extrahieren, nachdem die Länge des Strings NULL was bedeutet, dass die gesamte verkettete characterfolge NULL .

Wenn du das tun musst, dann ist eine Alternative, NULL mit leerer characterfolge vor der Verkettung zu replace.

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

Es scheint, dass Sie versuchen, so etwas wie folgt zu tun.

NB, ich habe die Idee einer Tally \ Numbers-Tabelle im Gegensatz zu einer loop enthalten. Tally-Tische werden typischerweise als performativer angesehen. Bitte lesen Sie über sie.

 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) 

Hart nicht die Länge in WHILE LOOP. Manchmal kann die angegebene inputslänge Ihren hartcodierten Wert überschreiten. Aber trotzdem bekommst du etwas. Wenn die Länge kleiner als der Wert ist, erhältst du den leeren Wert. Wenn Sie 'SELECT' anstelle von PRINT verwenden, get NULL als Ausgabe.

Behandle dieses Problem

Ersetzen Sie den hartcodierten Wert durch LEN (@thechars)

Oder

Griff NULL : ISNULL (CONVERT (VARCHAR, ASCII (SUBSTRING (@Thechars, @ Position, 1))), '')

Erste ist am besten