【问题标题】:How to sum the alpha numeric column如何对字母数字列求和
【发布时间】:2021-08-14 09:32:26
【问题描述】:

我有一列(附在下面),其中包含我需要对所有值求和的字母数字值。

Percentage
----------
50.6687 percent
36.0178 percent
33.1196 percent
29.7688 percent
7.6338 percent
97.1024 percent
40.7949 percent
161.56 percent

我尝试了这段代码,但最终出现错误

SUM(CAST(S.FIELD_PERCENTAGE AS FLOAT)) OVER() [Sum of PERCENTAGE]

错误是

消息 8114,第 16 级,状态 5,第 8 行
将数据类型 nvarchar 转换为浮点数时出错。

我怎样才能达到这个预期的结果:

Percentage         Sum of Percentage
----------         ----------------
50.6687 percent    456.666
36.0178 percent    456.666
33.1196 percent    456.666
29.7688 percent    456.666
7.6338 percent     456.666
97.1024 percent    456.666
40.7949 percent    456.666
161.56 percent     456.666

【问题讨论】:

  • 50.6687 percent 不是一个有效的数字,所以为了用它计算,试试TRIM(REPLACE(S.FIELD_PERCENTAGE, 'percent', ''))
  • 修复您的设计,停止将数值数据存储为字符串数据类型。
  • 我强烈建议不要将浮点数用于百分比值。浮点数用于科学值,因此不能准确存储所有数字。

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

50.6687 percent 不是一个有效的数字,所以为了计算它,在你的 CAST 中尝试TRIM(REPLACE(S.FIELD_PERCENTAGE, 'percent', ''))

DECLARE @t TABLE(
FIELD_PERCENTAGE varchar(50)
)

INSERT INTO @t VALUES
('50.6687 percent')
,('36.0178 percent')
,('33.1196 percent')
,('29.7688 percent')
,('7.6338 percent')
,('97.1024 percent')
,('40.7949 percent')
,('161.56 percent')

SELECT sum(cast(TRIM(REPLACE(S.FIELD_PERCENTAGE, 'percent', '')) AS FLOAT)) over() [Sum of PERCENTAGE]
  FROM @t s

【讨论】:

    【解决方案2】:

    我使用了以下组合并取得了效果。

    SUM(CAST(REPLACE(S.FIELD_PERCENTAGE,'Percent','')AS FLOAT)) OVER() AS [Sum of Percentage],
    

    【讨论】:

    • 鉴于其他人已经提供了这个答案,我建议接受他们的答案而不是发布你自己的答案是礼貌的。
    • @DaleK 我已经注意到并赞成所有有用的答案。我已经分享了我的应用程序,这可能很有用。您能否删除对我的答案的反对意见,因为我已经分享了我申请的可能对参考有用的答案。
    • 我没有否决您的回答。但我没有看到您的回答对接受的回答有任何添加。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-05
    • 2018-09-03
    • 2020-11-11
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多