sql - T-SQL 拆分列结果并对结果进行数学运算
问题描述
我有一张像这样的文件大小的表格
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
到
Size Metric
68 bytes
122.8 Kb
23.5 Mb
1.2 Gb
有没有办法根据 SQL 中的“度量”列值对“大小”列值进行转换?
解决方案
一种方法是用于CHARINDEX
获取空间的位置并将值拆分为 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)
推荐阅读
- javascript - javascript,打印输入的最大数字的问题
- c - 为什么我的整数菜单有效,而我的字符菜单无效?
- django - Django rest 框架包括“X-CSRFTOKEN”标头,接收“CSRF 失败:CSRF 令牌丢失或不正确”
- angular - 部署的应用引擎没有压缩我的内容
- maven - 部署失败:Google App Engine 上的 Kotlin Spring Boot 应用
- php - SQLSTATE [42S22]:未找到列:1054 Yii 1.1 中“where 子句”中的未知列“注册”
- python - 使用 python 时出现命令行问题
- java - DOM 中两个不同元素的 Xpath OR 条件
- php - socket.io 可以在本地连接,但不能在真实的服务器上连接
- java - Java JSON POST 格式不正确