Конвертировать Varchar в Ascii - PullRequest
3 голосов
/ 20 декабря 2010

Я пытаюсь преобразовать содержимое поля VARCHAR в уникальный номер, на который может легко ссылаться третья сторона.

Как я могу преобразовать varchar в строковый эквивалент ascii? В TSQL? Функция ASCII () преобразует один символ, но что я могу сделать, чтобы преобразовать всю строку?

Я пытался использовать

CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),1,1)),'')AS VARCHAR(3))
+ CAST(ISNULL(ASCII(Substring(RTRIM(LTRIM(PrimaryContactRegion)),2,1)),'')AS VARCHAR(3))

.... но это утомительно, глупо выглядит и просто не работает, если у меня были длинные струны. Или, если будет лучше, как мне сделать то же самое в SSRS?

Ответы [ 2 ]

13 голосов
/ 20 декабря 2010

попробуйте что-то вроде этого:

DECLARE @YourString   varchar(500)

SELECT @YourString='Hello World!'

;WITH AllNumbers AS
(
    SELECT 1 AS Number
    UNION ALL
    SELECT Number+1
        FROM AllNumbers
        WHERE Number<LEN(@YourString)
)
SELECT
       (SELECT
            ASCII(SUBSTRING(@YourString,Number,1))
            FROM AllNumbers
            ORDER BY Number
            FOR XML PATH(''), TYPE
       ).value('.','varchar(max)') AS NewValue
       --OPTION (MAXRECURSION 500) --<<needed if you have a string longer than 100

ВЫХОД:

NewValue
---------------------------------------
72101108108111328711111410810033

(1 row(s) affected)

просто чтобы проверить это:

;WITH AllNumbers AS
(
    SELECT 1 AS Number
    UNION ALL
    SELECT Number+1
        FROM AllNumbers
        WHERE Number<LEN(@YourString)
)
SELECT SUBSTRING(@YourString,Number,1),ASCII(SUBSTRING(@YourString,Number,1)),* FROM AllNumbers

ВЫХОД:

                 Number
---- ----------- -----------
H    72          1
e    101         2
l    108         3
l    108         4
o    111         5
     32          6
W    87          7
o    111         8
r    114         9
l    108         10
d    100         11
!    33          12

(12 row(s) affected)

Кроме того, вы можете использовать это:

RIGHT('000'+CONVERT(varchar(max),ASCII(SUBSTRING(@YourString,Number,1))),3)

, чтобы заставить все значения ASCII в 3 цифры, я не уверен, если это необходимо на основе вашего использования.

Вывод с использованием 3 цифр на символ:

NewValue
-------------------------------------
072101108108111032087111114108100033

(1 row(s) affected)
0 голосов
/ 20 декабря 2010

Ну, я думаю, что решение этого будет очень медленным, но я думаю, что вы могли бы сделать что-то вроде этого:

DECLARE @count INT, @string VARCHAR(100), @ascii VARCHAR(MAX)

SET @count = 1
SET @string = 'put your string here'
SET @ascii = ''

WHILE @count <= DATALENGTH(@string)
BEGIN
    SELECT @ascii = @ascii + '&#' + ASCII(SUBSTRING(@string, @count, 1)) + ';'
    SET @count = @count + 1
END

SET @ascii = LEFT(@ascii,LEN(@ascii)-1)
SELECT @ascii

У меня нет компьютера с ядром базы данных, поэтому я не могу проверить этот код. Если это работает, то вы можете создать UDF на основе этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...