大家好日子, 我希望有人可以帮我解决我遇到的问题。我有一个数据库,存储在硬盘驱动器上审查的数据量。值可以是兆字节或千兆字节。
示例:
Hard Drive 1 100MB
Hard Drive 2 2.5 GB
Hard Drive 3 650 MB
我的问题是这个。我需要添加这些值以获取已审核的数据量。我需要将兆字节转换为千兆字节,然后将所有值加在一起以获得总数。
我可以在查询中执行此操作,还是函数更适合此类操作?我将如何做到这一点?
提前感谢您的帮助!
答案 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”表