如何在SQL中查找字符串中每个字符的计数?

如何在SQL中查找字符串中每个字符的计数?,sql,Sql,我有字符串AABBCCCDEEEE,预期结果为 AA - 2 BB - 2 CC - 3 D - 1 E - 4 我认为以下是SQL Server中此问题的答案: with Temp as ( select substring('AABBCCCDEEEE',1,1) as character, 1 as number union all select substring('AABBCCCDEEEE',

我有字符串AABBCCCDEEEE,预期结果为

AA - 2
BB - 2
CC - 3
D  - 1
E  - 4

我认为以下是SQL Server中此问题的答案:

with Temp as (
               select substring('AABBCCCDEEEE',1,1) as character, 1 as number
               union all
               select substring('AABBCCCDEEEE',1+number,1) as character, number + 1 
               from Temp
               where number < len('AABBCCCDEEEE')
             )
select character, count(1) as count
from Temp
group by character option(maxrecursion 20);

您可以使用以下脚本逐个拆分字符并将其存储到临时表中。最后应用GROUP BY/COUNT以获得所需的结果

注意:这在MSSQL中是可行的。对于其他数据库,可以使用相同的逻辑

DECLARE @STR VARCHAR(MAX) = 'AABBCCCDEEEE'
DECLARE @LoopCountSt INT = 1
DECLARE @LoopCountEnd INT = LEN(@STR)

DECLARE @TempTable TABLE(
    val VARCHAR(1)
)

WHILE @LoopCountSt <= @LoopCountEnd
BEGIN
    INSERT INTO @TempTable(val)
    SELECT SUBSTRING(@STR,@LoopCountSt,1)

    SET @LoopCountSt = @LoopCountSt + 1
END

SELECT val, COUNT(*) Total_Count
FROM @TempTable
GROUP BY Val

我不知道“AA”是一个角色。@GordonLinoff,不是。他是说有两个A字。@CetinBasoz。“CC”是指有两个“C”字符吗?@GordonLinoff,是的,字符串中有3个字符,显然不在那里写CCC是一种打字错误。看起来你是在挑三拣四。@CetinBasoz,AAXXAA的预期结果是什么?
val Total_Count
A   2
B   2
C   3
D   1
E   4