Here is a simple URL encoding function (it uses the varchar parameter as a parameter), which I found long ago on some forum
create function urlencode(@str as varchar(4000))
returns varchar(4000)
as
begin
declare @hex char(16)
declare @c char(1)
set @hex='0123456789ABCDEF'
declare @ostr varchar(4000)
set @ostr=''
declare @l int
set @l = 1
while @l <= len(@str)
begin
set @c = substring(@str,@l,1)
if @c between '0' and '9'
or @c between 'A' and 'Z'
or @c between 'a' and 'z'
set @ostr = @ostr + @c
else
set @ostr = @ostr + '%' +
substring(@hex,(ascii(@c)/16)+1,1)
+substring(@hex,(ascii(@c)&15)+1,1)
set @l=@l+1
end
return @ostr
end
go
How will you handle unicode? Well, it's pretty simple if you don't like Hindu or Arabic characters, but care about Central European languages. You just need to use CAST (@nvarchar as varchar) .
, - .
declare @t1 nvarchar(256)
select @t1 = N'áâãäåæçèéêëìíîïðñòóôõöùúûüýÿāăąćĉċčĕėęěĝğġģĥħĩīĭįĵķļľńňŋōŏőŕřśŝşšťũūŭůűŵŷźžǻǽǿ'
select @t1
declare @t2 varchar(512)
select @t2 = cast(@t1 as varchar(512))
select @t2
,
áâãäåæçèéêëìíîïðñòóôõöùúûüýÿāăąćĉċčĕėęěĝğġģĥħĩīĭįĵķļľńňŋōŏőŕřśŝşšťũūŭůűŵŷźžǻǽǿ
aaaaa?ceeeeiiii?nooooouuuuyyaaacccceeeegggghhiiiijkllnn?ooorrsssstuuuuuwyzz???
, , . (, æ, ð, ŋ), , , ( 2 , æ = > ae).
REPLACE(), , , . , ,
1) ( ) 3 - int (0,1) , nchar (1) null, varchar (2) null
2) loop SUBSTRING() char 3) WHEN THEN
update @temp_table
set converted = CASE original
WHEN N'æ' THEN 'ae'
WHEN N'ŋ' THEN 'n'
... and so on ...
ELSE CAST(original AS VARCHAR(2))
4) , , , varchar().
nvarchar() varchar() urlencode(), .
, /, , . , CAST to varchar .
CLR ( #), switch/case. , , , CLR . CLR ( SQL- CLR, , ), # ( !) SQL .