Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Конвертить из Unicode  [new]
kika
Member

Откуда:
Сообщений: 585
День добрый!
Подскажите как мне символы в строке @Resname перевести в русские?

Я делаю так:

declare @Resname varchar(8000)
declare @TempResname char(20)
select @Resname='http://search.rambler.ru/srch?words=%EA%F3%E1%E0+%EE%F1%EE%E1%E5%ED%ED%EE%F1%F2%E8&where=1'
select @Resname=right(@Resname,len(@Resname)-CHARINDEX('?',@Resname))
select @Resname=right(@Resname,len(@Resname)-(charindex('%',@Resname)-1))
select @Resname=left(@Resname,charindex('&',@Resname)-1)
select @Resname=replace(substring(@Resname,CHARINDEX('%', @Resname),3),'%','0x')
select @Resname=char(@Resname)
select @Resname

На что мне выдается ошибка:
Syntax error converting the varchar value '0xEA' to a column of data type int.

Подскажите, как быть?
5 мар 05, 13:22    [1366839]     Ответить | Цитировать Сообщить модератору
 Re: Конвертить из Unicode  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
Может как-нибудь так попробовать...
declare @i int, @j int, @chr char(1), @x int, @s varchar(255), @r varchar(255)
select @i=1, @j=0, @x=0, @r='', @s='%EA%F3%E1%E0+%EE%F1%EE%E1%E5%ED%ED%EE%F1%F2%E8'
while @i<=len(@s) begin
	set @chr = upper(substring(@s,@i,1))
	if @chr between '0' and '9' begin
		set @j=@j+1
		select @x=@x+(ascii(@chr)-48)*power(16,2-@j)
	end else if @chr between 'A' and 'F' begin
		set @j=@j+1
		set @x=@x+(ascii(@chr)-55)*power(16,2-@j)
	end else if @chr<>'%' set @r=@r+@chr
	if @j=2 begin
		set @r=@r+char(@x)
		select @j=0, @x=0
	end
	set @i=@i+1
end
select @r
5 мар 05, 16:09    [1367381]     Ответить | Цитировать Сообщить модератору
 Re: Конвертить из Unicode  [new]
Богдан Гоцкий
Member

Откуда: Львов
Сообщений: 504
declare @Resname varchar(4000),
	@sql nvarchar(4000),
	@bin varbinary(4000)

select @Resname='http://search.rambler.ru/srch?words=%EA%F3%E1%E0+%EE%F1%EE%E1%E5%ED%ED%EE%F1%F2%E8&where=1'
select @Resname=right(@Resname,len(@Resname)-CHARINDEX('?',@Resname))
select @Resname=right(@Resname,len(@Resname)-(charindex('%',@Resname)-1))
select @Resname=left(@Resname,charindex('&',@Resname)-1)
select @Resname=replace(@Resname, '+','%20')
select @Resname=replace(@Resname, '%','')
select @Resname='0x' + @Resname
select @sql='set @m=' + @Resname
exec sp_executesql @sql, N'@m varbinary(4000) out', @bin out
select @Resname = cast(@bin as varchar(4000))
select @Resname
5 мар 05, 16:42    [1367463]     Ответить | Цитировать Сообщить модератору
 Re: Конвертить из Unicode  [new]
kika
Member

Откуда:
Сообщений: 585
Народ, а подскажите как эту же задачу реализовать на Visual Vasic?
9 мар 05, 14:54    [1371859]     Ответить | Цитировать Сообщить модератору
 Re: Конвертить из Unicode  [new]
Glory
Member

Откуда:
Сообщений: 104760
kika
Народ, а подскажите как эту же задачу реализовать на Visual Vasic?

https://www.sql.ru/forum/actualtopics.aspx?bid=22
9 мар 05, 14:57    [1371869]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить