51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> sqlserver >> 文章正文

自定义进制转换的函数或者存储过程

更新时间:2012-1-4:  来源:51代码网

我现在想做一个进制转换的函数或者存储过程,"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" 依次代表十进制中的0,1,2,3。。。。。34,35
我现在想一个int类型的数字转换所谓的自己定义的36进制的数据。比如输入35 返回00000Z (6位的)不足补0,36返回000010,这样可以用6位数据达到21亿左右的数据。不过现在自己的思路太繁琐,求高手指点。

--十进制转为十六进制

DECLARE
@binary varbinary(255),
@str_return varchar(255)

SELECT
@binary = CONVERT(varbinary(255),29327795562177529)


EXEC master.dbo.xp_varbintohexstr @binary, @str_return OUTPUT
SELECT
结果 = reverse(@str_return)

/*
结果
__________________________
008613974878369F10000011x0
*/

--十六进制转为十进制
CREATE FUNCTION dbo.f_hex_dec(@s varchar(16))
RETURNS bigint
AS
BEGIN
--作者:pbsql
--参数不得含'0'~'9'、'a'~'f'、'A'~'F'之外的任意字符(首尾空格除外),否则返回0
  DECLARE @i int,@result bigint
  SELECT @i=0,@result=0,@s=RTRIM(LTRIM(UPPER(REVERSE(@s))))
  WHILE @i<LEN(@s)
  BEGIN
    IF SUBSTRING(@s,@i+1,1) not between '0' and '9' and SUBSTRING(@s,@i+1,1) not between 'A' and 'F'
    BEGIN
      SELECT @result=0
      break
    END
    SELECT @result=@result+(CHARINDEX(SUBSTRING(@s,@i+1,1),'0123456789ABCDEF')-1)*POWER(16,@i),@i=@i+1
  END
  RETURN @result
END
GO

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 赞助商链接
    推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |