declare @str varchar(8000);set @str = 'qothobnslfdnoweavnivmnqpwf';;WITHTENS (N) AS (SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0 UNION ALL SELECT 0),THOUSANDS (N) AS (SELECT 1 FROM TENS t1 CROSS JOIN TENS t2 CROSS JOIN TENS t3),MILLIONS (N) AS (SELECT 1 FROM THOUSANDS t1 CROSS JOIN THOUSANDS t2),TALLY (N) AS (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 0)) FROM MILLIONS)SELECT N, LetterAsPosition = substring(@str, N, 1), AsciiAtPosition = ascii(substring(@str, N, 1)) FROM TALLY WHERE N <= datalength(@str) ORDER BY N;
--=============================================================================-- Create some test data. This is NOT a part of the solution--=============================================================================--===== Conditionally drop the test table to make reruns easier IF OBJECT_ID('tempdb..#MyHead','U') IS NOT NULL DROP TABLE #MyHead;--===== Build and populate the test table on the flyWITH cteBuild3CharData AS( --=== Builds 3 random characters and a random 1-3 length SELECT TOP 100000 WierdData = CAST(CHAR(ABS(CHECKSUM(NEWID()))%256) AS VARCHAR(3)) + CAST(CHAR(ABS(CHECKSUM(NEWID()))%256) AS VARCHAR(3)) + CAST(CHAR(ABS(CHECKSUM(NEWID()))%256) AS VARCHAR(3)), RandomLen = ABS(CHECKSUM(NEWID()))%3+1 FROM sys.all_columns ac1, sys.all_columns ac2) --=== Use the random length to determine how long a string to save -- and put it all in the test table SELECT WierdData = SUBSTRING(WierdData,1,RandomLen) INTO #MyHead FROM cteBuild3CharData;--=============================================================================-- In the absence of clear requirements, solve most of the problem.--=============================================================================--===== Display the Original data and 0-255 for each available character SELECT WierdData, Character1 = ASCII(SUBSTRING(WierdData,1,1)), Character2 = ASCII(SUBSTRING(WierdData,2,1)), Character3 = ASCII(SUBSTRING(WierdData,3,1)) FROM #MyHead;