【问题标题】:T-SQL: SUM Number between Delimiters from StringT-SQL:字符串中分隔符之间的 SUM 数
【发布时间】:2019-02-12 20:24:04
【问题描述】:

我需要从字符串中获取可变长度的数字并将它们相加。

字符串的格式如下:

EH:NUMBER=SomeOtherStuff->Code

我正在通过RIGHT() 提取代码并加入另一个表以使组正确,目前我正在使用 sum 通过日期将其组合在一起:

SUM(CASE WHEN (MONTH(data.DATE1) = 5  AND YEAR(data.DATE1) = YEAR(GETDATE())) THEN 1 ELSE 0 END) N'Mai',

然后我需要对字符串中的数字求和,而不是行数。

一些例子:

Month1 EH:1=24->ZTM
Month1 EH:4=13-21->LKm
Month2 EH:3=34,33,43->LKm
Month2 EH:7=12,92-29,29->LKm
Month2 EH:5=24-26,11,21,22->ZOL

我需要什么:

Material - Month1 - Month2
ZTM - 1 - 0
LKM - 4 - 10
ZOL - 0 - 5

你能帮帮我吗?

问候

【问题讨论】:

  • 给我们一个例子和想要的结果。

标签: sql-server tsql sum type-conversion


【解决方案1】:

短版: 您正在寻找的是SUBSTRING。

加长版: 要得到 NUMBER 的数值之和,您需要考虑如何分解它。

我建议按照以下步骤操作:

  1. 从字符串中提取 NUMBER 部分。这应该通过 SUBSTRING 完成(就像您使用 RIGHT 提取代码一样)。要获取子字符串的开始和长度,请使用 charindex(或 patindex,如果您愿意)。
  2. 使用 cast 将 NUMBER 部分转换为数值(或 convert 或您熟悉的)
  3. 现在您可以进行聚合了。

所以 SUM(CAST(SUBSTRING(*这部分你必须自己弄清楚)) 作为 正确的数字数据类型))。 我会让你自己找出要插入的值,并建议先找到分隔字符的位置,然后提取 NUMBER 部分,然后获取数值......你明白了。

这是为了更好地了解您实际在做什么。

干杯,祝你的任务好运 马丁

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-05
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多