我需要在十六进制数字的字符串表示中重新排列字符。这是一个输入(上部字符串)和所需结果(下部字符串)的示例。
我在这里借用了这个人的代码: http://dpatrickcaldwell.blogspot.hr/2009/05/converting-decimal-to-hexadecimal-with.html 谢了,兄弟们!这应该照顾我的十进制到十六进制转换,并且它有效,我已经测试过了。
现在这里是我的T-SQL代码,应该处理部件的移动:
CREATE FUNCTION DecodeDecKeyCard
(
@value AS BIGINT
) RETURNS CHAR(8) AS BEGIN
DECLARE @convertedNum VARCHAR(MAX),
@result CHAR(8) = '',
@flag INT = 1,
@loop INT = 4;
SELECT @convertedNum = dbo.ConvertToBase(@value, 16);
WHILE @loop > 0
BEGIN
SELECT @result = @result + SUBSTRING(@convertedNum, (@loop*2) - @flag, 1);
IF(@flag = 1)
SET @flag = 0;
ELSE
SET @flag = 1;
SET @loop = @loop -1;
END
RETURN @result
END
由于我在SQL方面是一个完整的菜鸟,我不知道如何调试它。我已经用Google搜索了一些关于它的东西,但结果一直指的是VS的付费版本和一些黑客或诸如此类的东西......坦率地说,我很难按时(和金钱)自己设置这个此刻。
与上述代码相关的一些事情:
编辑: 我目前的代码导致没有返回数据...十六进制数从一开始就被视为一个字符串。
我想说明为什么我的代码不起作用?
答案 0 :(得分:3)
二进制风格:
declare @value int = 1234567890
declare @value_bytes binary(4) = cast(@value as binary(4))
declare @swapped_bytes binary(4) = cast(reverse(@value_bytes) as binary(4))
select
@value_bytes [Input],
@swapped_bytes [Output],
convert(char(8), @swapped_bytes, 2) [As text]
有关:
Input Output As text
0x499602D2 0xD2029649 D2029649
UDF:
create function DecodeDecKeyCard ( @value as int ) returns char(8)
as
begin
return convert(char(8), cast(reverse(cast(@value as binary(4))) as binary(4)), 2)
end
(如果可以使用bigint
,binary(8)
和char(16)
答案 1 :(得分:1)
--10 CHARACTER INPUT
declare @input varchar(10) = '0xD2CF901A'
SELECT RIGHT(RIGHT(@input,8),2) + SUBSTRING(RIGHT(@input,8),5,2) + SUBSTRING(RIGHT(@input,8),3,2) + LEFT(RIGHT(@input,8),2)
--8 CHARACTER INPUT
declare @input varchar(10) = 'D2CF901A'
SELECT RIGHT(@input,2) + SUBSTRING(@input,5,2) + SUBSTRING(@input,3,2) + LEFT(@input,2)