MS SQL Serverでビット幅算出

SELECT ROUND(LOG(8)/LOG(2),0,1)+1

LOG(8)/LOG(2)はMySQLのLOG(8,2)またはLOG2(8)の代わりMS SQL ServerMySQLのLOG関数のように第2オプションでbaseの指定ができない為。

ROUND(X,0,1)は第3オプションを指定することで、小数点以下切捨てとして使用している。

  • ストアドプロシージャ作成
CREATE FUNCTION BitWidth(@Integer INT) RETURNS INT AS
BEGIN
  RETURN CASE WHEN @Integer=0 THEN 0 ELSE ROUND(LOG(@Integer)/LOG(2),0,1)+1 END;
END
GO 
  • ストアドプロシージャ実行
SELECT dbo.BitWidth(8)
GO
4

参考

log(x)

LOG(B,X) は LOG(X) / LOG(B) に等価です。

MySQLではbaseが2のLOG2(x)関数も用意されている。

LOG2() は、保存のために数字が何ビットを必要とするか調べるのに便利です。この関数は式 LOG(X) / LOG(2) と同義です。