首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将lb和oz转换为grams SQL Server

将lb和oz转换为grams SQL Server
EN

Stack Overflow用户
提问于 2019-12-22 00:25:16
回答 1查看 623关注 0票数 0

我有一列重量为磅和盎司的柱子。

例如,我们在列中有这样的数据:

代码语言:javascript
复制
8 lb 8.863 oz
6900 lb 7.495 oz

有没有人能帮我把lb+oz一起转换成grams?

代码语言:javascript
复制
Birthweight = Visit.WeightField -- (TableName.FieldName)

我知道我们需要乘以454,但这行不通。

请帮助我在SQL行中更改上面的Weightfield列。

例如,kgs到gram的转换如下所示

代码语言:javascript
复制
  BirthWeight= ISnull(cast((cast(rtrim(replace(Visit.WeightField,'kg','')) as float) * 1000) as varchar(max)),'0')
EN

回答 1

Stack Overflow用户

发布于 2019-12-22 00:42:09

正如我所提到的,修复设计,修复问题。

代码语言:javascript
复制
--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;
GO

DB<>Fiddle

Warning__:这假设您的数据具有一定的一致性。如果你有像'7lbs4oz'这样的值,这是,而不是。如果是这样,我建议您添加列(类似于上面),然后手动修复您的数据。然后从错误中吸取教训,不要再犯错误了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59437901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档