我有一列重量为磅和盎司的柱子。
例如,我们在列中有这样的数据:
8 lb 8.863 oz
6900 lb 7.495 oz有没有人能帮我把lb+oz一起转换成grams?
Birthweight = Visit.WeightField -- (TableName.FieldName)我知道我们需要乘以454,但这行不通。
请帮助我在SQL行中更改上面的Weightfield列。
例如,kgs到gram的转换如下所示
BirthWeight= ISnull(cast((cast(rtrim(replace(Visit.WeightField,'kg','')) as float) * 1000) as varchar(max)),'0')发布于 2019-12-22 00:42:09
正如我所提到的,修复设计,修复问题。
--Sample table and data
CREATE TABLE dbo.YourTable (LbOz varchar(20));
INSERT INTO dbo.YourTable
VALUES('8 lb 8.863 oz'),('6900 lb 7.495 oz'),
('12 lb'),('4.867 oz');
GO
--Add normalised data
ALTER TABLE dbo.YourTable ADD Lb int;
ALTER TABLE dbo.YourTable ADD Oz decimal(5,3);
GO
--UPDATE values of normalised data
UPDATE YT
SET Lb = ISNULL(CONVERT(int,LEFT(YT.LbOz, CI.Lb - 2)),0),
Oz = ISNULL(CONVERT(decimal(5,3),SUBSTRING(YT.LbOz,ISNULL((CI.LB+3),0),CI.Oz - ISNULL((CI.Lb+3),0))),0)
FROM dbo.YourTable YT
CROSS APPLY (VALUES(NULLIF(CHARINDEX('lb',YT.LbOz),0),NULLIF(CHARINDEX('oz',YT.LbOz),0)))CI(Lb,Oz)
GO
--Convert to Grams
SELECT Lb, Oz,
((lb * 16) + oz) * 28.3495 AS g
FROM dbo.YourTable;
GO
DROP TABLE dbo.YourTable;
GOWarning__:这假设您的数据具有一定的一致性。如果你有像'7lbs4oz'这样的值,这是,而不是。如果是这样,我建议您添加列(类似于上面),然后手动修复您的数据。然后从错误中吸取教训,不要再犯错误了。
https://stackoverflow.com/questions/59437901
复制相似问题