gpt4 book ai didi

sql-server - 在 SQL Server 存储过程中使用十进制到二进制的转换

转载 作者:行者123 更新时间:2023-12-02 01:05:33 24 4
gpt4 key购买 nike

我需要能够将 int 列转换为二进制形式。此列表示位值的组合,用于在一列中存储多个值。我找到了一个解决方案,它创建了一个函数来将 int 值更改为其二进制形式,但我无法在此数据库中创建其他函数,并且想按原样在我的过程中实现它。

select @StoreFlags = r.StoreFlags
from insert I, StorageRule r
where r.Active = 1 and I.Active = 0

PRINT CONVERT(VARBINARY(16),@StoreFlags)

IF(@StoreFlags = 11)
insert into StoreQueue (TimeToExecute, Operation, Parameter, StorageID, StoreFlags)
select
DateAdd(mi, @Time, getutcdate()), 1, I.ID, r.ID, r.StoreFlags
from
insert I, StorageRule r
where
r.Active = 1 and I.Active = 0

上面的打印语句显示了我最初尝试转换为二进制但似乎是十六进制形式的地方。下面的函数可以满足我的需要,但我需要将它应用于变量 @StoreFlags 并专门在 If 语句中使用返回的答案而不是整数常量。此后,我需要操纵这些位以将其转换为新值。

CREATE FUNCTION dbo.Int2Binary (@i INT) 
RETURNS NVARCHAR(16)
AS
BEGIN
RETURN
CASE WHEN CONVERT(VARCHAR(16), @i & 32768 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 16384 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 8192 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 4096 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 2048 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 1024 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 512 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 256 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 128 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 64 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 32 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 16 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 8 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 4 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 2 ) > 0 THEN '1' ELSE '0' END
CASE WHEN CONVERT(VARCHAR(16), @i & 1 ) > 0 THEN '1' ELSE '0' END
END;
GO

SELECT dbo.Int2Binary(11)
GO

关于如何实现的任何建议。

编辑:

只是为了澄清;该函数将返回 11:0000000000001011。因此我需要更改那里的一位以在 If 之后的插入中使用。在我的例子中,这将更改为值 9,0000000000001001。

最佳答案

您可以使用此查询代替函数:

DECLARE @StoreFlags int = 11,
@StoreFlagsBin nvarchar(100) = N''

WHILE @StoreFlags > 0
BEGIN
SET @StoreFlagsBin = @StoreFlagsBin + CAST(@StoreFlags%2 as nvarchar(1))
SET @StoreFlags = @StoreFlags/2
END

SELECT REVERSE(@StoreFlagsBin)

输出:

1011

关于sql-server - 在 SQL Server 存储过程中使用十进制到二进制的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47688797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com