首页 > 解决方案 > 计算 1 之间的 0 - SQL

问题描述

我需要一个查询或函数来计算字符串中 1 之间的 0。

例如:

String1 = '10101101' -> Result=3
String2 = '11111001101' -> Result=1
String3 = '01111111111' -> Result=1

如果它位于字符串的开头,我只需要搜索 101 模式或 01 模式。

标签: sql-serverstringtsqlcount

解决方案


您可以尝试使用SUBTRING()数字表分解输入字符串:

SELECT
   String, COUNT(*) AS [101Count]
FROM (
   SELECT
      v.String,
      SUBSTRING(v.String, t.No - 1, 1) AS PreviousChar,
      SUBSTRING(v.String, t.No, 1) AS CurrentChar,
      SUBSTRING(v.String, t.No + 1, 1) AS NextChar
   FROM (VALUES
      ('10101101'),
      ('11111001101'),
      ('01111111111')
   ) v (String)
   CROSS APPLY (VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)) t (No)
) cte
WHERE
   CASE WHEN PreviousChar = '' THEN '1' ELSE PreviousChar END = '1' AND
   CurrentChar = '0' AND
   NextChar = '1'
GROUP BY String

结果:

String      101Count
10101101    3
11111001101 1
01111111111 1

笔记:

带别名的表v为源表,带别名的表t为编号表。如果输入字符串超过 10 个字符,请使用适当的数字(计数)表。


推荐阅读