我有一个包含X列的表.X将以十六进制格式存储大文本值。现在我想将hex转换为raw并验证数据。但是当我使用以下查询时, 运行查询后,我只获得文本的一部分而不是完整的文本。实际上原始文本非常大....
select UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(X)) as a from table name
我也尝试了以下查询,但没有用它也提取相同的
decalre @a varchar(max)
select UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW(X)) as new from table name.
请告诉我如何从sql中提取或查看大文本。示例查询可能会有所帮助。
答案 0 :(得分:1)
对于MS-SQL 2008,以下存储过程将十六进制字符串转换为varchar(max):
if exists (select * from dbo.sysobjects where name = 'f_hextostr' and xtype = 'FN')
drop function [dbo].[f_hextostr]
GO
CREATE FUNCTION [dbo].[f_hextostr] (@hexstring VARCHAR(max))
RETURNS VARCHAR(max)
AS
begin
declare @char1 char(1), @char2 char(1), @strlen int, @currpos int, @result varchar(max)
set @strlen=len(@hexstring)
set @currpos=1
set @result=''
while @currpos<@strlen
begin
set @char1=substring(@hexstring,@currpos,1)
set @char2=substring(@hexstring,@currpos+1,1)
if (@char1 between '0' and '9' or @char1 between 'A' and 'F')
and (@char2 between '0' and '9' or @char2 between 'A' and 'F')
set @result=@result+
char((ascii(@char1)-case when @char1 between '0' and '9' then 48 else 55 end)*16+
ascii(@char2)-case when @char2 between '0' and '9' then 48 else 55 end)
set @currpos = @currpos+2
end
return @result
end
GO
使用以下内容:
select dbo.f_hextostr('0x3031323')
或
select dbo.f_hextostr(X) from MyTable
答案 1 :(得分:0)
This can be done in SQL server using built-in conversions via varbinary data type.
-- VARCHAR TO (HEX) VARCHAR
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), 'Help'), 1) -- '0x48656C70'
-- (HEX) VARCHAR TO VARCHAR
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), '0x48656c70', 1)) -- 'Help' (requires 0x)
SELECT CONVERT(VARCHAR(MAX), CONVERT(VARBINARY(MAX), '48656c70', 2)) -- 'Help' (assumes 0x)
答案 2 :(得分:-1)
这似乎对我有用。
if exists (select * from dbo.sysobjects where name = 'HexToStr' and xtype = 'FN')
drop function [dbo].[HexToStr]
GO
CREATE FUNCTION [dbo].[HexToStr] (@hexstring VARCHAR(max))
RETURNS VARCHAR(max)
AS
begin
return @hexstring
end
GO