sql-server - 计算 1 之间的 0 - SQL
问题描述
我需要一个查询或函数来计算字符串中 1 之间的 0。
例如:
String1 = '10101101' -> Result=3
String2 = '11111001101' -> Result=1
String3 = '01111111111' -> Result=1
如果它位于字符串的开头,我只需要搜索 101 模式或 01 模式。
解决方案
您可以尝试使用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 个字符,请使用适当的数字(计数)表。
推荐阅读
- python - AttributeError:“NoneType”对象在使用 StringVar() 时没有属性“_root”
- php - 如何从php中包含'<'符号的字符串中删除空格?
- java - 将二叉树附加到另一个二叉树
- woocommerce - 如果街道地址在黑名单中,则拒绝结帐 WooCommerce
- c# - 在 ASP.NET Core 2.1 中没有为此 DbContext 配置数据库提供程序
- android - MPAndroidChart 分组栏不是从左侧开始
- jboss - jbpm & drools 工作台与日食。为什么这两者都存在?
- javascript - JSON.parse() 永远不会完成
- php - ODOO 10 发票验证
- meteor - Meteor 如何将一个模板助手调用到另一个助手中?