T-SQL拆分列结果并对结果进行数学运算
我有一张表,里面有这么多文件T-SQL拆分列结果并对结果进行数学运算,sql,tsql,Sql,Tsql,我有一张表,里面有这么多文件 FileSize 68 bytes 122.80 Kb 23.5 Mb 1.2 Gb 我需要以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' '
FileSize
68 bytes
122.80 Kb
23.5 Mb
1.2 Gb
我需要以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'&'),N'<',N'<'),N'>',N'>'),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
有没有办法根据SQL中的度量列值对大小列值进行转换?一种方法是使用CHARINDEX获取空间的位置,并将值拆分为两列。然后使用大小写表达式将值乘以适当的数量: 以你的桌子为例 选择V.FileSize 从值'68字节', “122.80 Kb”, “235MB”, “1.2 Gb”文件大小 选择*, V.[Size]*案例V.度量值,当“字节”然后为1./1024 * 1024 当'Kb'时,则为1。/1024 当'Mb'时,则为1 当'Gb'时,则为1024 以兆字节结束 从你的桌子上 交叉APPLYVALUESTRY\u CONVERTdecimal10,4,LEFTYT.FileSize,NULLIFCHARINDEX“”,YT.FileSize,0-1,STUFFYT.FileSize,1,NULLIFCHARINDEX“”,YT.FileSize,0,VSize,公制
根据上面我标记的答案,这就是我使用的
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
您希望转换什么类型的尺寸?有什么逻辑吗?只是转换成MbPerfect,谢谢
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