转换uniqueidentifier类型的函数如何写
转换uniqueidentifier类型的函数怎么写?
输入参数是一个uniqueidentifier类型的数。比如:10666CB5-C58E-4A61-B21C-000137177A8A
现在我用了某种方式转换一下,它最终变成“E78B5L24”
在C#中,我是这样实现的。
public static string GenUniqueString(Guid? seed = null)
{
string readyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string rtn = "";
var guid = (seed.HasValue ? seed.Value : Guid.NewGuid()).ToByteArray();
var cc = BitConverter.ToUInt16(guid, 0);
for (int i = 0; i < 8; i++)
{
rtn += readyStr[BitConverter.ToUInt16(guid, i * 2) % 35];
}
return rtn;
}
请问,如果我用SQL的函数,应该怎么写呢?
------解决思路----------------------
根据我的经验,楼主的readyStr长度是36,楼主取模用了35应该是误用了。
输入参数是一个uniqueidentifier类型的数。比如:10666CB5-C58E-4A61-B21C-000137177A8A
现在我用了某种方式转换一下,它最终变成“E78B5L24”
在C#中,我是这样实现的。
public static string GenUniqueString(Guid? seed = null)
{
string readyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string rtn = "";
var guid = (seed.HasValue ? seed.Value : Guid.NewGuid()).ToByteArray();
var cc = BitConverter.ToUInt16(guid, 0);
for (int i = 0; i < 8; i++)
{
rtn += readyStr[BitConverter.ToUInt16(guid, i * 2) % 35];
}
return rtn;
}
请问,如果我用SQL的函数,应该怎么写呢?
------解决思路----------------------
根据我的经验,楼主的readyStr长度是36,楼主取模用了35应该是误用了。
declare @a uniqueidentifier = '10666CB5-C58E-4A61-B21C-000137177A8A'
declare @b binary(16)
declare @bb varbinary
declare @n int=0
declare @c varchar(8) = ''
declare @m nvarchar(36) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
set @b = CONVERT(binary(16),@a)
while @n<8
begin
set @bb = substring(@b,@n*2+2,1) + substring(@b,@n*2+1,1)
set @c=@c+SUBSTRING(@m, (CONVERT(int, substring(@b,@n*2+2,1) + substring(@b,@n*2+1,1) ) % 35) + 1, 1)
set @n=@n+1
end
select @c