
拓狼
-
个人空间
- 组别:管理员
- 性别:
- 来自:北京 海淀
- 积分:1121
- 帖子:619
- 注册:
2007-05-23
|
各进制之间的转换函数
各进制之间的转换函数--王成辉整理,转贴请注明出自微软BI开拓者www.windbi.com --原帖地址/***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function BINTODEC(@s VARCHAR(255) ) --二进制转化为十进制 returns int as BEGIN DECLARE @i int, @temp char(1), @result int SELECT @i=1 SELECT @result=0 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=SUBSTRING(@s,@i,1) SELECT @result=@result+ (ASCII(@temp)-48)*POWER(2,LEN(@s)-@i) SELECT @i=@i+1 END return @result ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function DECTOBIN(@n int ) --十进制转化为二进制 returns varchar(255) as BEGIN DECLARE @i int,@temp int, @s varchar(255) SET @i=@n SET @s='' WHILE (@i>0) BEGIN SET @temp=@i % 2 SET @i=@i /2 SET @s=char(48+@temp)+@sEND RETURN @s ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function DECTOHEX(@n int ) --十进制转化为十六进制 returns varchar(255) as BEGIN DECLARE @i int,@temp int, @s varchar(255) SET @i=@n SET @s='' WHILE (@i>0) BEGIN SET @temp=@i % 16 SET @i=@i /16 IF @temp>9 SET @s=char(55+@temp)+@sELSE SET @s=char(48+@temp)+@sEND RETURN @s ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function HEXTODEC(@s VARCHAR(255) ) --十六进制转化为十进制 returns int as BEGIN DECLARE @i int, @temp char(1), @result int SELECT @i=1 SELECT @result=0 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=UPPER(SUBSTRING(@s,@i,1)) IF (@temp>='0') AND (@temp<='9') SELECT @result=@result+ (ASCII(@temp)-48)*POWER(16,LEN(@s)-@i) ELSE IF (@temp>='A') AND (@temp<='F') SELECT @result=@result+ (ASCII(@temp)-55)*POWER(16,LEN(@s)-@i) SELECT @i=@i+1 END return @result ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function DECTOOCT(@n int ) --十进制转化为八进制 returns varchar(255) as BEGIN DECLARE @i int,@temp int, @s varchar(255) SET @i=@n SET @s='' WHILE (@i>0) BEGIN SET @temp=@i % 8 SET @i=@i /8 SET @s=char(48+@temp)+@sEND RETURN @s ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function OCTTODEC(@s VARCHAR(255) ) --八进制转化为十进制 returns int as BEGIN DECLARE @i int, @temp char(1), @result int SELECT @i=1 SELECT @result=0 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=SUBSTRING(@s,@i,1) SELECT @result=@result+ (ASCII(@temp)-48)*POWER(8,LEN(@s)-@i) SELECT @i=@i+1 END return @result ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function ISBIN(@s VARCHAR(50) ) --检查是否为一个有效的二进制 returns bit as BEGIN DECLARE @i int, @temp char(1), @bool bit SELECT @i=1 SELECT @bool=0 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=SUBSTRING(@s,@i,1) --PRINT @temp if (@temp='0') OR (@temp='1') SELECT @bool=1 SELECT @i=@i+1 END return @bool ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function ISOCT(@s VARCHAR(50) ) --检查是否为一个有效的八进制 returns bit as BEGIN DECLARE @i int, @temp char(1), @bool bit SELECT @i=1 SELECT @bool=1 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=SUBSTRING(@s,@i,1) --PRINT @temp if (@temp>'7') OR (@temp<'0') SELECT @bool=0 SELECT @i=@i+1 END return @bool ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GOCREATE function ISHEX(@s VARCHAR(50) ) --检查是否为一个有效的十六进制 returns bit as BEGIN DECLARE @i int, @temp char(1), @bool bit SELECT @i=1 SELECT @bool=0 WHILE (@i<=LEN(@s)) BEGIN SELECT @temp=SUBSTRING(@s,@i,1) if (@temp<='f') AND (@temp>='a') OR (@temp<='F') AND (@temp>='A') OR (@temp<='9') AND (@temp>='0') SELECT @bool=1 SELECT @i=@i+1 END return @bool ENDGO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO /***************************************************************/
虽有智慧,不如乘势;虽有鎡基,不如待时。 君子学以聚之,问以辨之,宽以居之,仁以行之。 独学而无友,则孤陋而寡闻。
|