MS SQL Serverでビット幅算出
SELECT ROUND(LOG(8)/LOG(2),0,1)+1
LOG(8)/LOG(2)はMySQLのLOG(8,2)またはLOG2(8)の代わりMS SQL ServerはMySQLの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) と同義です。