sql 自定义函数--十进制转二进制

时间:2023-03-09 00:53:12
sql 自定义函数--十进制转二进制

随笔记忆:

 if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[DECTOBIN]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[DECTOBIN]
GO SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO create FUNCTION dbo.DECTOBIN(@Dec INT, @StrLen INT)
RETURNS VARCHAR(31)
AS
BEGIN
DECLARE @BinStr AS VARCHAR(31)
DECLARE @Div2 AS INT
DECLARE @Mod2 AS INT
IF @Dec < 0
RETURN 'NULL'
SET @Div2 = @Dec / 2
SET @Mod2 = @Dec % 2
SET @BinStr = ''
WHILE @Div2 <> 0
BEGIN
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
SET @Dec = @Dec / 2
SET @Div2 = @Dec / 2
SET @Mod2 = @Dec % 2 END;
SET @BinStr = CAST(@Mod2 AS CHAR(1)) + @BinStr
IF @StrLen > LEN(@BinStr)
BEGIN
IF @StrLen > 31
SET @StrLen = 31 DECLARE @ZeroStr VARCHAR(31)
DECLARE @OffsetLen TINYINT
SET @ZeroStr = ''
SET @OffsetLen = @StrLen - LEN(@BinStr) WHILE @OffsetLen > 0
BEGIN
SET @ZeroStr = @ZeroStr + ''
SET @OffsetLen = @OffsetLen - 1
END SET @BinStr = @ZeroStr + @BinStr
END
RETURN @BinStr END GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO