Функция T-SQL для получения значений ASCII символов - PullRequest
4 голосов
/ 14 февраля 2011

Я использую блок T-SQL, чтобы получить дамп символов ascii, хранящихся в столбце базы данных.Я знаю, что это легко достигается в Oracle с помощью функции DUMP ().Я не знаком с синтаксисом SQL Server, но использую что-то вроде этого.

    SET NOCOUNT ON
-- Create the variables for the current character string position 
-- and for the character string.
DECLARE @position int, @string char(15), @output char(1000), @output2 char(2000)
-- Initialize the variables.
SET @position = 1
SET @output2 = 'Start:'
SELECT @string = name from 
location where location_type = 4405 and owner_id = 362
and location_id = 53183
WHILE @position <= DATALENGTH(@string)

       BEGIN
       SELECT @output = CAST(ASCII(SUBSTRING(@string, @position, 1)) AS CHAR)
        + ' ' +      CHAR(ASCII(SUBSTRING(@string, @position, 1)))
        PRINT @output
        --SET @output2 = @output2 + '=' + @output
        SET @position = @position + 1
       END
        --PRINT @output2 
    SET NOCOUNT OFF
    GO

По какой-то причине, если я раскомментирую код, относящийся к @ output2, он не будет печатать @ output2 правильно.Идея состоит в том, чтобы получить все значения ascii, возвращаемые в виде одной строки, вместо получения строки для каждого символа.Я делаю что-то неправильно?

Ответы [ 2 ]

5 голосов
/ 14 февраля 2011

Если вы ищете одну строку, это, вероятно, самый простой способ (опираясь на ответ Киберкиви)

DECLARE @string char(15),
@output1 varchar(1000),
@output2 varchar(1000)

SELECT @string = name
from  location
where location_type = 4405 and owner_id = 362
and location_id = 53183

SET @output1 = ''
SET @output2 = ''

select 
    @output1 = @output1 + SUBSTRING(@string, number, 1) + ', ', 
    @output2 = @output2 + cast(ASCII(SUBSTRING(@string, number, 1)) as varchar) + ', '
from master..spt_values
where type='p' and number between 1 and LEN(@string)
order by number

PRINT @output1
PRINT @output2
2 голосов
/ 14 февраля 2011

Измените типы данных для @output и @ output2 на varchar. Замените DataLength на Len. Char имеет фиксированную длину и не увеличивается при добавлении строк в конце строки.

...