在SQL中添加不同大小的值

时间:2015-06-15 13:34:20

标签: sql sql-server

大家好日子,      我希望有人可以帮我解决我遇到的问题。我有一个数据库,存储在硬盘驱动器上审查的数据量。值可以是兆字节或千兆字节。

示例:

Hard Drive 1       100MB
Hard Drive 2       2.5 GB
Hard Drive 3       650 MB

我的问题是这个。我需要添加这些值以获取已审核的数据量。我需要将兆字节转换为千兆字节,然后将所有值加在一起以获得总数。

我可以在查询中执行此操作,还是函数更适合此类操作?我将如何做到这一点?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

The basic idea is to get the size by CASE like

Size / 
    CASE Unit 
        WHEN 'KB' THEN 1000 * 1000 
        WHEN 'MB' THEN 1000 
        WHEN 'GB' THEN 1 
        WHEN 'TB' THEN 0.001 
    END

Example for SQL Server:

DECLARE @Table table
(
    Size decimal(18,3),
    Unit char(2)
)

INSERT @Table VALUES (100, 'MB'), (2.5, 'GB'), (650, 'MB')

-- Get size for all rows
SELECT 
    *, 
    CONVERT(decimal(18, 3), 
        Size / CASE Unit WHEN 'MB' THEN 1000 WHEN 'GB' THEN 1 END
    ) AS GB 
FROM @Table

-- Get total
SELECT       
    CONVERT(decimal(18, 3), SUM(
        Size / CASE Unit WHEN 'MB' THEN 1000 WHEN 'GB' THEN 1 END
    )) AS GB 
FROM @Table

Result

Size                                    Unit GB
--------------------------------------- ---- ---------------------------------------
100.000                                 MB   0.01
2.500                                   GB   2.500
650.000                                 MB   0.650

(3 row(s) affected)

TotalGB
---------------------------------------
3.250

(1 row(s) affected)

答案 1 :(得分:0)

您可以使用CASE语句。

SELECT CASE WHEN COL3 LIKE '%MB' THEN COL2 * 1024 WHEN COL3 LIKE '%GB' THEN COL2 * 100 END AS "SIZE" --x100 to get decimal right FROM...

答案 2 :(得分:0)

如果您的架构定义了单独的列中的大小和“单位乘数”,请执行以下操作:

create table mult  (
  id varchar(2) not null, 
  mult int not null
)
go


insert into disks(id, size, mult_id) values 
  (1, 200, 'GB'),
  (2, 100, 'MB'),
  (3, 200, 'TB')

insert into mult(id, mult) values 
  ('MB', 1),
  ('GB', 1000),
  ('TB', 1000000)

然后创建一个表来将每个字符串量词映射到大小(以MB为单位)

-- The SELECT to get the result of each disk in MB
SELECT disks.id, size * mult.mult size_mb FROM disks JOIN mult on disks.mult_id = mult.id

这将以MB为单位给出每个磁盘的大小

.select()

您可以根据需要将其他乘数添加到“mult”表