如何在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
相关产品推荐
相关产品推荐

