【发布时间】:2014-01-11 01:20:53
【问题描述】:
我有一个以字节为单位存储各种文件大小的日志表。我希望能够查询数据库并返回已转换为 MB GB 等的最小可能浮点数。目前我可以以 MB 为单位返回值,但如何继续进一步除以最小值并附加单位?
SELECT CONCAT( ROUND( SUM( data_transferred ) /1048576, 2 ) , ' MB' )
FROM `logs`
任何帮助将不胜感激。
更新:
根据 voodoo417 提供的链接,我将查询更新为以下内容,这会将最相关的文件大小输出到小数点后两位并附加单位(1000 字节、1 KB、500 MB、2 GB 等):
SET @bytes := (SELECT SUM(data_transferred) FROM wp_ddownload_statistics);
SELECT
CASE
WHEN ABS(@bytes) < 1024 THEN CONCAT( ROUND( @bytes, 2 ), ' Bytes')
WHEN ABS(@bytes) < 1048576 THEN CONCAT( ROUND( (@bytes/1024), 2 ), ' KB')
WHEN ABS(@bytes) < 1073741824 THEN CONCAT( ROUND( (@bytes/1048576), 2 ), ' MB')
WHEN ABS(@bytes) < 1099511627776 THEN CONCAT( ROUND( (@bytes/1073741824), 2 ), ' GB' )
WHEN ABS(@bytes) < 1125899906842624 THEN CONCAT( ROUND( (@bytes/1099511627776), 2 ), ' TB')
WHEN ABS(@bytes) < 1152921504606846976 THEN CONCAT( ROUND( (@bytes/1125899906842624), 2 ), ' PB' )
WHEN ABS(@bytes) < 1180591620717411303424 THEN CONCAT( ROUND( (@bytes/1152921504606846976) ,2), ' EB' )
WHEN ABS(@bytes) < 1208925819614629174706176 THEN CONCAT( ROUND( (@bytes/1180591620717411303424), 2), ' ZB' )
WHEN ABS(@bytes) < 1237940039285380274899124224 THEN CONCAT( ROUND( (@bytes/1208925819614629174706176), 2), ' YB' )
WHEN ABS(@bytes) < 1267650600228229401496703205376 THEN CONCAT( ROUND( (@bytes/1237940039285380274899124224), 2), ' BB' )
END
【问题讨论】:
-
你能提供一些你想要的结果的例子吗?
-
作为 voodoo417 链接到下面,但我想在不定义用户函数的情况下执行此操作。 myitforum.com/cs2/blogs/jnelson/archive/2008/01/11/111351.aspx
标签: mysql byte filesize megabyte