Normalerweise würde man solche Fragestellungen. welcher Dezimalzahl nun 1011001 entspricht, damit beantworten, in dem man auf den Client verweist. Was aber, wenn man einfach wissen will, wie so etwas in T-SQL aussehen könnte? Ob man es dann später einsetzt, ist ja eine andere Sache:
DECLARE @input VARCHAR(255)
DECLARE @i INT
DECLARE @noi CHAR
DECLARE @result INT
SELECT @input = '1011001', @i=1, @result=0
WHILE (@i<=LEN(@input))
BEGIN
SELECT @noi=SUBSTRING(@input,@i,1)
SELECT @result=@result+ (ASCII(@noi)-48)*POWER(2,LEN(@input)-@i)
SELECT @i=@i+1
END
SELECT @result
-----------
89
(1 row(s) affected)
oder in der UDF-Variante:
CREATE FUNCTION dbo.convbin2dec(@input VARCHAR(255) )
RETURNS INT
AS
BEGIN
DECLARE @i INT
DECLARE @noi CHAR
DECLARE @result INT
SELECT @i=1, @result=0
WHILE (@i<=LEN(@input))
BEGIN
SELECT @noi=SUBSTRING(@input,@i,1)
SELECT @result=@result+ (ASCII(@noi)-48)*POWER(2,LEN(@input)-@i)
SELECT @i=@i+1
END
RETURN @result
END
GO
SELECT dbo.convbin2dec('1011001')
DROP FUNCTION dbo.convbin2dec
-----------
89
(1 row(s) affected)
Dies ist die Adaption der Excel Funktion BININDEZ().