Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / varchar -> binary / 25 сообщений из 34, страница 1 из 2
17.10.2002, 14:19:08
    #32059203
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Субж. Наоборот знаю, а вот именно так что-то не соображу.

Есть строка '0x1234'. Получить из нее binary-значение 0x1234.
...
Рейтинг: 0 / 0
17.10.2002, 14:27:30
    #32059210
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Подойдет ?

Код: plaintext
1.
2.
3.
4.
5.
6.
declare @var1 binary( 5 )
declare @mysql nvarchar( 4000 )
set @mysql = 'set @var1 = '+'0x1234'

select @var1
exec sp_executesql @mysql, N'@var1 binary(5) out', @var1 = @var1 out
select @var1
...
Рейтинг: 0 / 0
17.10.2002, 14:41:44
    #32059227
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Таким способом понятно, что можно :-) А не через динамический запрос никак-никак?
...
Рейтинг: 0 / 0
17.10.2002, 15:10:23
    #32059253
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Вот заготовка, ее нужно доработать...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
create function dbo.varchartovarbin( @string varchar( 8000 ) )
returns varbinary( 100 )
as
begin

declare @i int, @val binary, @result varbinary( 100 ), @length int

set @i =  3 
set @result =  0 

select @length = len(@string)

 -- validation of params
 
if @length < 4  or @length %  2  <>  0   or substring(@string,  1 ,  2 ) <> '0x' or @string is null return  0 


while (@i<@length)
begin

select @val = 
      (case substring(@string, @i,  1 )
       when '0' then  0 
       when '1' then  1 
       when '2' then  2 
       when '3' then  3 
       when '4' then  4 
       when '5' then  5 
       when '6' then  6 
       when '7' then  7 
       when '8' then  8 
       when '9' then  9 
       when 'A' then  10 
       when 'B' then  11 
       when 'C' then  12 
       when 'D' then  13 
       when 'E' then  14 
       when 'F' then  15 
       else - 1 
       end) *  16 
+
       case substring(@string, @i+ 1 ,  1 ) 
       when '0' then  0 
       when '1' then  1 
       when '2' then  2 
       when '3' then  3 
       when '4' then  4 
       when '5' then  5 
       when '6' then  6 
       when '7' then  7 
       when '8' then  8 
       when '9' then  9 
       when 'A' then  10 
       when 'B' then  11 
       when 'C' then  12 
       when 'D' then  13 
       when 'E' then  14 
       when 'F' then  15 
       else - 256 
       end

  set @result = @result + @val

  set @i = @i +  2 

end

return @result
end
go
select dbo.varchartovarbin('0x1234')
go
...
Рейтинг: 0 / 0
17.10.2002, 15:13:47
    #32059260
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Это необходимо добавить перед set @result = @result + @val:

if @val < 0 return 0
...
Рейтинг: 0 / 0
17.10.2002, 15:39:22
    #32059287
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Понятно. Ладно, спасибо большое всем!
...
Рейтинг: 0 / 0
17.10.2002, 19:30:02
    #32059415
Dwarf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
set nocount on
declare
@varchar varchar(100),
@hexstring char(16),
@result varbinary(100),
@i int,
@pow int

set @hexstring = '0123456789ABCDEF'
set @result = 0
set @pow = 0

set @varchar = '0x12340f0a'

set @i = len(@varchar)
while @i >= 3
begin
set @result = @result + (charindex(substring(@varchar, @i, 1), @hexstring) - 1) * power(16, @pow)
set @i = @i - 1
set @pow = @pow + 1
end
select @result
...
Рейтинг: 0 / 0
17.10.2002, 19:42:12
    #32059417
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
GreenSunrise, а что Вы хотите сделать? У меня то же возникла эта задача. Правда я ее еще не начинал решать.
Теперь, наверное, время сэкономлю.
...
Рейтинг: 0 / 0
18.10.2002, 09:39:31
    #32059490
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Задача дурацкая и нужная только в качестве заплатки на время перехода от одной версии софта, который мы пишем, к другой. Нужна внутри коллектива разработчиков :-) Есть таблица, в которой хранится бинарное поле и процедура, куда передается строковое значение как раз в виде '0x1234'. Закатать в таблицу, ессно, надо в бинарном. Вот :-)

Вариант Glory меня вполне устраивает, эт я больше выпендриваюсь ;-) (вернее, пытаюсь выяснить на будущее, вдруг да пригодится в серьезной ситуации).

2 Dwarf: а у вас результат выполнения какой-то странноватый... 0x12340F0A. Для вашего примера хотелось увидеть 0x0123456789ABCDEF.
...
Рейтинг: 0 / 0
18.10.2002, 09:49:14
    #32059493
Тимур
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
А так не пробовали ? :0)
Код: plaintext
1.
2.
3.
4.
5.
declare  @Bin varbinary ( 10 )
declare  @Ch varchar ( 10 )
select @Ch='0x123456'
select @Bin=cast(@Ch as varbinary( 10 ))
select @Bin



Документацию читают только ламеры ??????
...
Рейтинг: 0 / 0
18.10.2002, 09:56:36
    #32059497
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
2 (Тимур)
И в результате будет:
0x3078313233343536
...
Рейтинг: 0 / 0
18.10.2002, 10:14:05
    #32059510
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Тимур, а ответы пишут только торопыжки? :-)
mishgan2000 - именно.
...
Рейтинг: 0 / 0
18.10.2002, 10:23:05
    #32059515
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Объясните плиз такую вещь
в варианте от Glory
почему на выходе получаем 0x1234000000, т.е. 1234 она перенесла в старшие разряды, или так и должно быть ?
...
Рейтинг: 0 / 0
18.10.2002, 10:29:23
    #32059521
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
В варианте Glory нужно заменить binary на varbinary, тогда дополнения нулями не будет.
...
Рейтинг: 0 / 0
18.10.2002, 11:00:23
    #32059545
GammiBear
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
DECLARE @Z varbinary(10)
declare @X int

EXEC xp_sscanf '0x12345F', '%lX', @X OUTPUT
SELECT @X

select @Z= cast(@X as varbinary(3))
select @Z

select @Z= cast(@X as varbinary(5))
select @Z

P.S.
Так все-таки : документацию читают только ламеры ???
...
Рейтинг: 0 / 0
18.10.2002, 11:07:46
    #32059551
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
2GammiBear
На
Microsoft SQL Server 2000 - 8.00.679 (Intel X86) Aug 26 2002 15:09:48 Copyright (c) 1988-2000 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)

строка EXEC xp_sscanf '0x12345F', '%lX', @X OUTPUT
генерирует ошибку

Msg 50002, Level 1, State 50002
Error executing extended stored procedure: Invalid Parameter Type
...
Рейтинг: 0 / 0
18.10.2002, 11:09:55
    #32059554
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Вроде бы уже много раз писали (в Books Online, в частности), что xp_sscanf, xp_sprintf работают только
со строками:

Currently only the %s format argument is supported.
...
Рейтинг: 0 / 0
18.10.2002, 11:15:25
    #32059565
GammiBear
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Configuration :

Microsoft SQL Server 2000 Developer Edition + SP2 (Intel X86) + Win2K PROF RUS SP3

Все работает на ура.
...
Рейтинг: 0 / 0
18.10.2002, 11:18:09
    #32059566
jimmers
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
2GammiBear

Это потому, уважаемый GammiBear, что Вы игнорируете хотфиксы. Если бы Вы удосужились и установили фикс,
закрывающий дыру в xp_sprintf, то все бы не работало
(как и дОлжно быть).

Пришлите вывод select @@version
...
Рейтинг: 0 / 0
18.10.2002, 11:23:05
    #32059570
Dwarf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
GreenSunrise: Результат тот, что нужно :) Посмотрите внимателно, что конвертится и для чего нужен @hexstring :)
...
Рейтинг: 0 / 0
18.10.2002, 11:33:54
    #32059576
GammiBear
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Nov 19 2001 13:23:50 Copyright (c) 1988-2000 Microsoft Corporation Developer Edition on Windows NT 5.0 (Build 2195: Service Pack 2)

P.S.

1. интересно сколько времени назад писался BOL?
2. Currently only ... supported лично я понимаю, что in future будет поддерживаться что-то еще
3. Интересный хотфикс получается, который гасит функциональность ...
4. Не понятно в чем бага , если sscanf понимает что-нибудь еще , кроме %s
...
Рейтинг: 0 / 0
18.10.2002, 11:39:06
    #32059580
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
2Dwarf: точно, извините за наезд :-) Возвращает то, что нужно.

Только ваш способ все равно не катит, потому что при чуть более длинных строках начинается Arithmetic overflow error.
...
Рейтинг: 0 / 0
18.10.2002, 11:43:54
    #32059582
Rom
Rom
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
Странно, у меня не возникает никаких переполнений
...
Рейтинг: 0 / 0
18.10.2002, 11:45:00
    #32059583
Lexis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
для BOL выходил сервис пак, это не шутка
...
Рейтинг: 0 / 0
18.10.2002, 12:07:38
    #32059594
GreenSunrise
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
varchar -> binary
О переполнениях.

Вместо
Код: plaintext
set @varchar = '0x12340f0a'
пишем
Код: plaintext
set @varchar = '0x0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF'
и привет.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / varchar -> binary / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]