在sql中计算文件大小

时间:2013-11-20 09:08:43

标签: sql sql-server-2008

我在表格中有如下文档文件大小:

Filesize
7013    
14050
1300050
7775

默认情况下,文件大小以字节为单位。 我想使用sql将文件大小相应地转换为KB,MB或GB。

已经能够使用以下sql来计算文件大小, 但我不知道如何将它们分组为KB,MB,GB。

SELECT CAST(ROUND(SUM(CAST(filesize AS Numeric(15,4))/1024),2) AS decimal(10,2)) 
FROM Attachments

我的最终目标是:

 6.848 KBs     
 13.720 KBs
 1.240 MBs
 7.593 KBs

我使用的转换速率为1KiloByte = 1024字节

1 个答案:

答案 0 :(得分:2)

你可以试试这个

DECLARE @X NUMERIC(18,4) =  23

SELECT CASE WHEN @X <= 1024                         THEN   CONVERT(NVARCHAR, @X) + ' BYTES'
            WHEN @X >1024 AND @X <= 1048576         THEN   CONVERT(NVARCHAR, @X/1024) + ' KB'
            WHEN @X >1048576 AND @X <= 1073741824       THEN   CONVERT(NVARCHAR, @X/1048576) + ' MB'
            WHEN @X >1073741824 AND @X <= 109951162777  THEN   CONVERT(NVARCHAR, @X/1073741824) + ' GB'
            ELSE CONVERT(NVARCHAR, @X/109951162777) + ' TB'
       END

例如,使用您的表格和字段

    SELECT CASE WHEN yt.FileSize <= 1024                            THEN   CONVERT(NVARCHAR, yt.FileSize) + ' BYTES'
                    WHEN yt.FileSize >1024 AND yt.FileSize <= 1048576           THEN   CONVERT(NVARCHAR, yt.FileSize/1024) + ' KB'
                    WHEN yt.FileSize >1048576 AND yt.FileSize <= 1073741824     THEN   CONVERT(NVARCHAR, yt.FileSize/1048576) + ' MB'
                    WHEN yt.FileSize >1073741824 AND yt.FileSize <= 109951162777    THEN   CONVERT(NVARCHAR, yt.FileSize/1073741824) + ' GB'
                    ELSE CONVERT(NVARCHAR, yt.FileSize/109951162777) + ' TB'
               END
    FROM YourTable yt