【问题标题】:Convert lb and oz to grams - SQL Server将磅和盎司转换为克 - SQL Server
【发布时间】:2020-04-13 17:08:23
【问题描述】:

我有一个以磅和盎司为单位的重量列

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

8 lb 8.863 oz
6900 lb 7.495 oz

有人可以帮我将lb+oz 一起转换为克吗?

Birthweight = Visit.WeightField -- (TableName.FieldName)

我是新的,我们需要乘以 454,但它不起作用。

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

例如公斤到克的换算如下

  BirthWeight= ISnull(cast((cast(rtrim(replace(Visit.WeightField,'kg','')) as float) * 1000) as varchar(max)),'0')

【问题讨论】:

  • 这里的真正问题是你有varchar'8 lb 8.863 oz',而不是带有的列Lbs int8,另一列oz 具有decimal8.863。你真的需要修正你的设计。然后你可以很容易地转换这个
  • 另外,为什么要标记 MySQL SQL Server?

标签: sql sql-server ssms ssms-2016


【解决方案1】:

正如我所说,修复设计,修复问题。

--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

警告:这假设您的数据具有一定的一致性。如果你有像'7lbs4oz' 这样的值,这不会起作用。如果是这种情况,我建议您添加列(如上),然后手动修复数据。然后从错误中吸取教训,不要再犯了。

【讨论】:

  • 因为我的查询字段看起来像这样(Birth_Weight=Visit.WeightField) ...我需要操纵那条线。
  • 不知道你的意思是什么@SanthoshKumar。您拥有以上所需的一切。
  • 这里不是所有这些查询。您能否在一行中向我展示如何使用 weightfield 列修改行以将磅和盎司一起转换为克。请在我的问题中查找我用来将公斤转换为克的查询。我需要类似于该行的查询
  • 您不能添加新列、更新它们,然后在一个查询 @Santhoshkumar 中计算克数。但是,如果您不了解上述内容,则说明您对 SQL 缺乏基本的了解,需要花时间学习它们。
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多