0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e
期待出力された私の六角入力されている:
<<[IMG][SIZE]HALF[/SIZE][ID]54[/ID][/IMG]>>
0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e
期待出力された私の六角入力されている:
<<[IMG][SIZE]HALF[/SIZE][ID]54[/ID][/IMG]>>
を反復処理するために再帰を使用します:
declare @string varchar(max) = '0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e';
select @string = replace(@string,hex,chr)
from (values
('0x3c','<'),
('0x3e','>'),
('0x5b','['),
('0x5d',']'),
('0x2f','/')
) hexes(hex,chr);
select @string as string;
戻り値:
string
------
<<[IMG][SIZE]HALF[/SIZE][ID]54[/ID][/IMG]>>
複数の文字がある場合、またはハードコーディングが発生している場合は、
そして、また、その結果を取得します交換をループ:あなたはUDFでラップたい場合
declare @string varchar(max) = '0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e';
declare @loopcount int = 0;
declare @hex char(4);
while (patindex('%0x[0-9][a-f0-9]%',@string)>0
and @loopcount < 128) -- just safety measure to avoid infinit loop
begin
set @hex = substring(@string,patindex('%0x[0-9][a-f0-9]%',@string),4);
set @string = replace(@string, @hex, convert(char(1),convert(binary(2), @hex, 1)));
set @loopcount = @loopcount + 1;
end;
select @string as string;
そしてあなたも、クエリでそれを使用することができます。
これは私が探しているものです、本当にあなたの助けに感謝! –
@NileshBankarありがとう。私は、ハードコードされていないバージョンを置き換えて、より多くのコードを置き換えることができるようにしました。 – LukStorms
あなたの文字列で、あなたはそれを解析する必要があるので、六角や文字データをミキシングコードでトリッキーな部分は、0xCC
部分文字列をそれが表す文字に変換することです。まず、バイナリのふりをして、charにキャストします。すべて0xCC
のサブストリング
declare @imp nvarchar(max) = '0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e';
with cte as (
select replace(col, val, cast(convert(binary(2), val, 1) as char(1))) as col
from (
-- sample table
select @imp as col
) tbl
cross apply (select patindex('%0x__%',tbl.col) pos) p
cross apply (select substring(col,pos,4) val) v
union all
select replace(col, val, cast(convert(binary(2), val, 1) as char(1))) as col
from cte
cross apply (select patindex('%0x__%',col) pos) p
cross apply (select substring(col,pos,4) val) v
where pos > 0
)
select *
from cte
where patindex('%0x__%',col) = 0;
返し
それは常に、あなたはまた、このようにそれらを置き換えることができ、変数に交換が必要ASCIIコードの小さなセットのみのためならcol
<<[IMG][SIZE]HALF[/SIZE][ID]54[/ID][/IMG]>>
助けてくれてありがとう!! –
https://dba.stackexchange.com/questions/132996/convert-hexadecimal-to-varchar –
SELECT CONVERT(VARCHAR(MAX)、0x3c0x3c0x5bIMG0x5d0x5bSIZE0x5dHALF0x5b0x2fSIZE0x5d0x5bID0x5d540x5b0x2fID0x5d0x5b0x2fIMG0x5d0x3e0x3e)。 –
このリンクは私に役立ちます。 << [IMG] [SIZE]ハーフ[/ SIZE] [ID] 54 [/ ID] [/ IMG] >>この結果を取得する必要があります。 –