繁体   English   中英

T-SQL 拆分列结果并对结果进行数学运算

[英]T-SQL to split column results and do maths on the result

我有一张像这样的文件大小的表格

FileSize
68 bytes
122.80 Kb
23.5 Mb
1.2 Gb

我需要 SELECT 以 Mb 为单位的结果,所以结果看起来像

Converted FileSize
0.000068
0.1228
23.5
1200

这会正确拆分结果

WITH Splitted AS
(
    SELECT CAST(N'<x>' + REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([File Size],N' ',N' '),N'&',N'&amp;'),N'<',N'&lt;'),N'>',N'&gt;'),N' ',N'</x><x>') + N'</x>' AS XML) testXML
    FROM Attachment
)
SELECT testXML.value('/x[1]','float') AS Number
      ,testXML.value('/x[2]','nvarchar(max)') AS metric
FROM Splitted

Size      Metric
68        bytes
122.8     Kb
23.5      Mb      
1.2       Gb

有没有办法根据 SQL 中的“公制”列值对“大小”列值进行转换?

一种方法是使用CHARINDEX获取空间的 position 并将值拆分为 2 列。 然后使用CASE表达式将值乘以适当的数量:

WITH YourTable AS(
    SELECT V.FileSize
    FROM (VALUES('68 bytes'),
                ('122.80 Kb'),
                ('23.5 Mb'),
                ('1.2 Gb'))V(FileSize))
SELECT *,
       V.[Size] * CASE V.Metric WHEN 'bytes' THEN 1. / (1024 * 1024)
                                WHEN 'Kb' THEN 1. / 1024
                                WHEN 'Mb' THEN 1
                                WHEN 'Gb' THEN 1024
                  END AS Megabytes
FROM YourTable YT
     CROSS APPLY(VALUES(TRY_CONVERT(decimal(10,4),LEFT(YT.FileSize,NULLIF(CHARINDEX(' ',YT.FileSize),0)-1)),STUFF(YT.FileSize,1,NULLIF(CHARINDEX(' ',YT.FileSize),0),'')))V(Size,Metric)

基于以上我标记为答案的内容,这就是我使用过的。

SELECT [File Type], [File Size],
      CAST( A.Size * CASE A.Metric WHEN 'bytes' THEN 1.0 / (1024 * 1024)
                                WHEN 'Kb' THEN 1.0 / 1024
                                WHEN 'Mb' THEN 1
                                WHEN 'Gb' THEN 1024
                  END as NUMERIC(10, 2))AS Megabytes
FROM Attachment AA
     CROSS APPLY(
        VALUES( TRY_CONVERT(decimal(10,4),LEFT(AA.[File Size], NULLIF(CHARINDEX(' ',AA.[File Size]),0)-1)),
            STUFF(AA.[File Size],1,NULLIF(CHARINDEX(' ',AA.[File Size]),0),''))
        )A (Size, Metric)

WHERE AA.[File Type] IS NOT NULL
ORDER BY Megabytes ASC
File type   File size   Megabytes
txt         68 bytes    0.00
txt         68 bytes    0.00
PDF         122.80 KB   0.12
PDF         122.80 KB   0.12
txt         23.5 Mb     23.50
PDF         1.2 Gb      1228.80

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM