开发者社区 问答 正文

将磅和盎司转换为克-SQL Server

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

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

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

展开
收起
心有灵_夕 2019-12-22 14:06:32 682 分享 版权
阿里云 AI 助理回答

要将磅(lb)和盎司(oz)转换为克(g),你可以遵循以下步骤:

  1. 首先,知道基本转换率:

    • 1 lb = 453.592 g
    • 1 oz = 28.3495 g
  2. 然后,编写一个SQL表达式来处理这个转换。对于你给出的数据格式(例如,8 lb 8.863 oz),我们需要先提取出磅和盎司的数值,然后分别转换它们,并相加以得到总克数。

下面是一个可能的SQL转换示例,假设你的数据列Visit.WeightField中存储的是类似'8 lb 8.863 oz'这样的字符串格式:

DECLARE @WeightField NVARCHAR(50) = '8 lb 8.863 oz'; -- 这里是你的字段值,实际应用中应替换为Visit.WeightField

-- 提取磅和盎司的数值
DECLARE @lbs FLOAT = CAST(SUBSTRING(@WeightField, CHARINDEX(' ', @WeightField) - PATINDEX('%[0-9]%', REVERSE(LEFT(@WeightField, CHARINDEX(' ', @WeightField)))) + 1, CHARINDEX(' ', @WeightField) - CHARINDEX(' ', @WeightField) - PATINDEX('%[0-9]%', REVERSE(LEFT(@WeightField, CHARINDEX(' ', @WeightField)))) - 1) AS FLOAT);
DECLARE @ozs FLOAT = CAST(RIGHT(@WeightField, CHARINDEX('.', RIGHT(@WeightField, LEN(@WeightField) - CHARINDEX(' ', REVERSE(@WeightField)) + 1)) - 1) AS FLOAT);

-- 转换并相加
DECLARE @grams FLOAT = (@lbs * 453.592) + (@ozs * 28.3495);

SELECT CAST(@grams AS VARCHAR(MAX)) AS BirthWeight;

这段代码首先定义了一个变量@WeightField来模拟你的字段值,然后通过字符串操作提取出磅和盎司的数值,进行转换计算后,最后输出转换成克的结果。

如果你需要在查询中直接使用,可以尝试将上述逻辑封装进一个用户自定义函数(UDF)或者直接嵌入到你的查询语句中,但请注意,直接在查询中使用这么复杂的字符串解析可能会对性能有影响,特别是当处理大量数据时。因此,最佳实践可能是先对数据进行预处理,将其转换为更易于计算的结构(比如分成两列:一列磅、一列盎司),然后再执行转换计算。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答