Sql 如何查找字符在字符串中出现的连续次数

Sql 如何查找字符在字符串中出现的连续次数,sql,sql-server,count,google-bigquery,bigquery-standard-sql,Sql,Sql Server,Count,Google Bigquery,Bigquery Standard Sql,我有一个字符串111111221111131111111 我想创建一个1连续出现次数的数组,即前6个字符是1->两个2->四个1->一个3->七个1 所以我想要的输出是[6,4,7] 我知道如何查找字符在字符串中出现的次数,但知道如何查找字符在连续模式中出现的次数。以下示例适用于BigQuery标准SQL ;WITH splitString(val) AS ( -- convert the string to xml, seperating the elements by

我有一个字符串111111221111131111111

我想创建一个1连续出现次数的数组,即前6个字符是1->两个2->四个1->一个3->七个1

所以我想要的输出是[6,4,7]


我知道如何查找字符在字符串中出现的次数,但知道如何查找字符在连续模式中出现的次数。

以下示例适用于BigQuery标准SQL

;WITH splitString(val) AS       
(
    -- convert the string to xml, seperating the elements by spaces
    SELECT    CAST('<r><i>' + REPLACE(@string,' ','</i><i>') + '</i></r>' AS XML)
)
SELECT  [Key],
        COUNT(*) [WordCount]
FROM    (   -- select all of the values from the xml created in the cte
            SELECT  p.value('.','varchar(100)') AS [Key]
            FROM    splitString
                    CROSS APPLY val.nodes('//i') t (p)) AS t
GROUP BY [Key]
#standardSQL
WITH `project.dataset.table` AS (
  SELECT '11111122111131111111' line
)
SELECT line, ARRAY(SELECT LENGTH(e) FROM UNNEST(REGEXP_EXTRACT_ALL(line, r'1+')) e) result
FROM `project.dataset.table`   
结果

[
  {
    "line": "11111122111131111111",
    "result": [
      "6",
      "4",
      "7"
    ]
  }
]

对于实际的RDBMS有点不清楚

这里我们使用一个特别的理货表,任何大小合适的表都可以。然后,我们应用标准间隙和孤岛

范例

返回


请标记您正在使用的数据库。我不知道有哪个数据库真正实现了标准SQL。请提及使用RDBMS
Declare @S varchar(500) = '11111122111131111111'
Declare @C varchar(10)  = '1'


Select Seq=Row_Number() over (Order by Seq)
      ,Cnt=count(*)
 From (
        Select N
              ,S = substring(@S,N,1)
              ,Seq = N - Row_Number() over (Order by N)
         From ( Select Top (len(@S)) 
                       N=Row_Number() Over (Order By (Select NULL)) 
                  From master..spt_values n1
              ) A
         Where substring(@S,N,1)=@C
      ) A
 Group By Seq
 Order By Seq
Seq Cnt
1   6
2   4
3   7