MS SQL ServerでKMG単位で表示する

DECLARE @size int; 
SELECT @size=8192;
SELECT STR(@size/CASE WHEN @size<1024 THEN 1
                  ELSE POWER(1024,ROUND(LOG(@size)/LOG(1024),0,1)) END )
          + SUBSTRING('KMGT',CAST(ROUND(LOG(@size)/LOG(1024),0,1) as bigint),1);
GO
8K

ストアドプロシージャ登録

CREATE FUNCTION bigintToSIByte(@size BIGINT) RETURNS varchar(255) AS
BEGIN
  RETURN STR(@size/CASE WHEN @size<1024 THEN 1
                  ELSE POWER(1024,ROUND(LOG(@size)/LOG(1024),0,1)) END )
          + SUBSTRING('KMGT',CAST(ROUND(LOG(@size)/LOG(1024),0,1) as bigint),1);
END
GO
SELECT dbo.bigintToSIByte(8192);
GO
8K
  • 参考
    • 1024バイト毎に割っているので、正確にはSI単位系ではなく2進接頭辞 - Wikipedia だが、コンピュータでのSI単位の使われ方はこちらなので、こちらで処理している。