-
-
Save i-amolo/a4370d62f3c623cb30d3d8218607aabc to your computer and use it in GitHub Desktop.
Convert Bytes to KB, MB, GB, TB, PB or EB and format the output to human readable format
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| CREATE FUNCTION [dbo].[udf_FormatBytes] | |
| ( | |
| @InputNumber DECIMAL(38,7), | |
| @InputUOM VARCHAR(5) = 'Bytes' | |
| ) | |
| RETURNS VARCHAR(20) | |
| WITH SCHEMABINDING | |
| AS | |
| BEGIN | |
| -- Declare the return variable here | |
| DECLARE @Output VARCHAR(48) | |
| DECLARE @Prefix MONEY | |
| DECLARE @Suffix VARCHAR(6) | |
| DECLARE @Multiplier DECIMAL(38,2) | |
| DECLARE @Bytes DECIMAL(38,2) | |
| SELECT @Multiplier = | |
| CASE @InputUOM | |
| WHEN 'Bytes' THEN 1 | |
| WHEN 'Byte' THEN 1 | |
| WHEN 'B' THEN 1 | |
| WHEN 'Kilobytes' THEN 1024 | |
| WHEN 'Kilobyte' THEN 1024 | |
| WHEN 'KB' THEN 1024 | |
| WHEN 'Megabytes' THEN 1048576 | |
| WHEN 'Megabyte' THEN 1048576 | |
| WHEN 'MB' THEN 1048576 | |
| WHEN 'Gigabytes' THEN 1073741824 | |
| WHEN 'Gigabyte' THEN 1073741824 | |
| WHEN 'GB' THEN 1073741824 | |
| WHEN 'Terabytes' THEN 1099511627776 | |
| WHEN 'Terabyte' THEN 1099511627776 | |
| WHEN 'TB' THEN 1099511627776 | |
| WHEN 'Petabytes' THEN 1125899906842624 | |
| WHEN 'Petabyte' THEN 1125899906842624 | |
| WHEN 'PB' THEN 1125899906842624 | |
| WHEN 'Exabytes' THEN 1152921504606846976 | |
| WHEN 'Exabyte' THEN 1152921504606846976 | |
| WHEN 'EB' THEN 1152921504606846976 | |
| WHEN 'Zettabytes' THEN 1180591620717411303424 | |
| WHEN 'Zettabyte' THEN 1180591620717411303424 | |
| WHEN 'ZB' THEN 1180591620717411303424 | |
| WHEN 'Yottabytes' THEN 1208925819614629174706176 | |
| WHEN 'Yottabyte' THEN 1208925819614629174706176 | |
| WHEN 'YB' THEN 1208925819614629174706176 | |
| WHEN 'Brontobytes' THEN 1237940039285380274899124224 | |
| WHEN 'Brontobyte' THEN 1237940039285380274899124224 | |
| WHEN 'BB' THEN 1237940039285380274899124224 | |
| WHEN 'Geopbytes' THEN 1267650600228229401496703205376 | |
| WHEN 'Geopbyte' THEN 1267650600228229401496703205376 | |
| END | |
| SELECT @Bytes = @InputNumber*@Multiplier | |
| SELECT @Prefix = | |
| CASE | |
| WHEN ABS(@Bytes) < 1024 THEN @Bytes --bytes | |
| WHEN ABS(@Bytes) < 1048576 THEN (@Bytes/1024) --kb | |
| WHEN ABS(@Bytes) < 1073741824 THEN (@Bytes/1048576) --mb | |
| WHEN ABS(@Bytes) < 1099511627776 THEN (@Bytes/1073741824) --gb | |
| WHEN ABS(@Bytes) < 1125899906842624 THEN (@Bytes/1099511627776) --tb | |
| WHEN ABS(@Bytes) < 1152921504606846976 THEN (@Bytes/1125899906842624) --pb | |
| WHEN ABS(@Bytes) < 1180591620717411303424 THEN (@Bytes/1152921504606846976) --eb | |
| WHEN ABS(@Bytes) < 1208925819614629174706176 THEN (@Bytes/1180591620717411303424) --zb | |
| WHEN ABS(@Bytes) < 1237940039285380274899124224 THEN (@Bytes/1208925819614629174706176) --yb | |
| WHEN ABS(@Bytes) < 1267650600228229401496703205376 THEN (@Bytes/1237940039285380274899124224) --bb | |
| ELSE (@Bytes/1267650600228229401496703205376) --geopbytes | |
| END, | |
| @Suffix = | |
| CASE | |
| WHEN ABS(@Bytes) < 1024 THEN ' Bytes' | |
| WHEN ABS(@Bytes) < 1048576 THEN ' KB' | |
| WHEN ABS(@Bytes) < 1073741824 THEN ' MB' | |
| WHEN ABS(@Bytes) < 1099511627776 THEN ' GB' | |
| WHEN ABS(@Bytes) < 1125899906842624 THEN ' TB' | |
| WHEN ABS(@Bytes) < 1152921504606846976 THEN ' PB' | |
| WHEN ABS(@Bytes) < 1180591620717411303424 THEN ' EB' | |
| WHEN ABS(@Bytes) < 1208925819614629174706176 THEN ' ZB' | |
| WHEN ABS(@Bytes) < 1237940039285380274899124224 THEN ' YB' | |
| WHEN ABS(@Bytes) < 1267650600228229401496703205376 THEN ' BB' | |
| ELSE ' Geopbytes' | |
| END | |
| -- Return the result of the function | |
| SELECT @Output = CAST(@Prefix AS VARCHAR(39)) + @Suffix | |
| RETURN @Output | |
| END | |
| GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment