我有一个小二进制数作为字符串 001011
,我希望将其转换为 binary
或 varbinary
(即 0xB
)。我将如何在 MS SQL Server 中执行此操作?
最佳答案
CREATE FUNCTION dbo.fnConvertToBinary
(@str VARCHAR(32), @base TINYINT)
RETURNS VARBINARY(32)
AS
BEGIN
DECLARE @bytes INT = 0
DECLARE @i INT = 0
DECLARE @l INT = LEN(@str)
IF (@base = 2)
BEGIN
WHILE @i <= @l
BEGIN
SET @bytes = @bytes * 2 + CAST(SUBSTRING(@str, @i, 1) AS TINYINT)
SET @i = @i + 1
END
END
IF (@base = 8)
BEGIN
WHILE @i <= @l
BEGIN
SET @bytes = (CAST(SUBSTRING(@str, @i, 1) AS TINYINT)
* POWER(8, @l-@i))
+ @bytes
SET @i = @i + 1
END
END
IF (@base = 10)
SET @bytes = CAST(@str AS INT)
IF (@base = 16)
BEGIN
SET @i = @l
WHILE @i > 0
BEGIN
DECLARE @bit INT = (CASE SUBSTRING(@str, @i, 1)
WHEN '0' THEN 0 WHEN '1' THEN 1
WHEN '2' THEN 2 WHEN '3' THEN 3
WHEN '4' THEN 4 WHEN '5' THEN 5
WHEN '6' THEN 6 WHEN '7' THEN 7
WHEN '8' THEN 8 WHEN '9' THEN 9
WHEN 'A' THEN 10 WHEN 'B' THEN 11
WHEN 'C' THEN 12 WHEN 'D' THEN 13
WHEN 'E' THEN 14 WHEN 'F' THEN 15 END)
SET @bytes = @bit * POWER(16, @l-@i) + @bytes
SET @i = @i - 1
END
END
RETURN CAST(@bytes AS VARBINARY(32))
END
GO
关于sql - 如何将 base-2 字符串(例如 '001011' )转换为二进制数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15557490/