首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在中总结单词的字符代码?

如何在中总结单词的字符代码?
EN

Stack Overflow用户
提问于 2018-04-19 09:42:51
回答 2查看 1.3K关注 0票数 0

我需要和最后6个字符串符号的字符码。我可以通过C#将最后6个字符相加如下:

代码语言:javascript
复制
string str = "helloWorld";
var sumLastSixCharacters = str.Where((ch, i) => (i > 3) ).Sum(x => x); //631

我编写了以下代码来总结最后6个字符,但在我看来,应该有更优雅的解决方案:

代码语言:javascript
复制
DECLARE @Foo VARCHAR(10);
SET @Foo='helloWorld';

SELECT   
    CASE WHEN TRY_CONVERT(BIGINT, @Foo) IS NULL   
    THEN ASCII(SUBSTRING(@Foo, 5,1)) + ASCII(SUBSTRING(@Foo, 6,1)) + 
        ASCII(SUBSTRING(@Foo, 7,1)) + ASCII(SUBSTRING(@Foo, 8,1)) + 
        ASCII(SUBSTRING(@Foo, 9,1)) + ASCII(SUBSTRING(@Foo, 10,1)) 
    ELSE 'Cast succeeded'  
END AS Result; 

伙计们,有没有人知道我能用更好的方法计算最后6个字符的总和?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-19 09:51:23

您可以对反向字符串使用递归CTE。

代码语言:javascript
复制
DECLARE @str VARCHAR(100)='helloWorld';

WITH recCTE AS
(
    SELECT REVERSE(@str) AS OriginalReversed
          ,1 AS Position
          ,SUBSTRING(REVERSE(@str),1,1) AS CharAtPos
    UNION ALL
    SELECT r.OriginalReversed
          ,r.Position +1
          ,SUBSTRING(r.OriginalReversed,r.Position+1,1)
    FROM recCTE AS r
    WHERE Position<6 --specify the character count here
)
/*
--Use this to see the intermediate result
SELECT * 
FROM recCTE
*/
SELECT SUM(ASCII(CharAtPos)) --631
FROM recCTE;

一些解释

CTE将接受反向输入,启动一个1并接受第一个字符(从末尾)。

然后,它向下迭代,增加一个位置来读取下一个字符。

这样您就可以将test转换为

代码语言:javascript
复制
t
s
e
t

SUM值使用ASCII是所需的结果

更新

总结ASCII-值可能是个坏主意.任何字符相同的单词都会导致同样的结果.

如果您只需要从字符串中提取一个数字,您可以使用以下方法:

代码语言:javascript
复制
DECLARE @str VARCHAR(100)='helloWorld';
SELECT CAST(CAST(RIGHT(@str,6) AS BINARY(6)) AS BIGINT)

这将只获取6个字节的二进制块,并将其解释为BIGINT

票数 2
EN

Stack Overflow用户

发布于 2021-07-16 14:18:33

这样就行了。我修改了它来解决原来的问题。

对我来说,我需要一个函数来计算连在一起的字段,以找到模式的重复,比如: abc \ cba和cba _cba\ abc

现在我可以找到这些实例并将其中一个替换为另一个实例,所以现在我只需要使用abc \ cba

用选择的database_of_your_choice.dbo.CREATE_STRING_CHECKSUM('yourstringhere')调用它

--以下代码

代码语言:javascript
复制
use database_of_your_choice
go

CREATE FUNCTION dbo.CREATE_STRING_CHECKSUM
(
    @string nvarchar(100) = NULL
)
RETURNS int
AS
BEGIN
    
    DECLARE @pos int = 0,
            @len int = len(@string),
            @ascii_sum int = 0,
            @iter_count int = 6

    --just in case you pass a string with less than 6 characters
    if(@iter_count > @len) set @iter_count=@len

    --loops for @iter_count: 6 times
    while @iter_count > 0 begin
        --passing @len to SUBSTRING will look at the right-most char decremented
        --with each iteration: get the right most 6 characters
        set @ascii_sum += ASCII(substring(@string,@len,1))
        set @len -= 1
        set @iter_count -= 1
    end 

    -- Return the result of the function
    RETURN @ascii_sum

END
GO
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49917792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档