You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在T-SQL中计算字符串字符编码之和?含末尾6字符求和需求

优雅实现T-SQL计算字符串最后6个字符的编码之和

嘿,我看到你已经用C#搞定了计算字符串最后6个字符的编码之和,现在想要更简洁优雅的T-SQL方案对吧?先来回顾下你的C#实现:

string str = "helloWorld"; 
var sumLastSixCharacters = str.Where((ch, i) => (i > 3) ).Sum(x => x); // 结果为631

你的T-SQL思路方向是对的,但重复写SUBSTRING和ASCII确实不够优雅。这里有个更简洁易维护的方案,既处理字符串长度≥6的情况,也兼容长度不足6的场景:

DECLARE @Foo VARCHAR(100) = 'helloWorld';

-- 计算最后6个字符的ASCII编码之和
SELECT SUM(ASCII(SUBSTRING(@Foo, LEN(@Foo) - 6 + n, 1))) AS SumLastSixAscii
FROM (VALUES (1), (2), (3), (4), (5), (6)) AS nums(n)
WHERE LEN(@Foo) >= n;

方案说明:

  • 用VALUES生成1到6的数字序列,避免重复编写相同的SUBSTRING逻辑
  • LEN(@Foo) - 6 + n精准定位最后6个字符的每个位置:比如字符串长度为10时,起始位置是10-6+1=5,依次取到第10位,正好对应最后6个字符
  • WHERE LEN(@Foo) >= n处理字符串长度不足6的情况,只对存在的字符计算编码和

如果你的字符串是Unicode类型(NVARCHAR),把ASCII换成UNICODE函数即可支持多字节字符的编码计算:

DECLARE @Foo NVARCHAR(100) = N'helloWorld';

SELECT SUM(UNICODE(SUBSTRING(@Foo, LEN(@Foo) - 6 + n, 1))) AS SumLastSixUnicode
FROM (VALUES (1), (2), (3), (4), (5), (6)) AS nums(n)
WHERE LEN(@Foo) >= n;

这个写法不仅更简洁,后续如果需要调整取最后N个字符,只需要修改数字序列和公式里的数字就行,维护起来方便很多~

内容的提问来源于stack exchange,提问作者StepUp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:58:42