跳到主要内容

COUNT_SUBSTRINGS

描述

COUNT_SUBSTRINGS 函数用于计算一个字符串中指定子串出现的次数。注意:当前实现在每次匹配到子串时,会偏移一个子串长度继续查找。例如,当 str='ccc' 且 pattern='cc' 时,返回结果为 1。

语法

COUNT_SUBSTRINGS(<str>, <pattern>[, <start_pos>])

参数

参数说明
<str>需要检测的字符串。类型:STRING
<pattern>需要匹配的子串。类型:STRING
<start_pos>开始搜索的位置(从1开始计数)。类型:INT。可选参数

返回值

返回 INT 类型,表示子串在字符串中出现的次数。

特殊情况:

  • 如果 str 为 NULL,返回 NULL
  • 如果 pattern 为空字符串,返回 0
  • 如果 str 为空字符串,返回 0
  • 如果 start_pos 小于等于0或超出字符串长度范围,返回 0

示例

  1. 基本用法
SELECT count_substrings('a1b1c1d', '1');
+----------------------------------+
| count_substrings('a1b1c1d', '1') |
+----------------------------------+
| 3 |
+----------------------------------+
  1. 连续逗号的情况
SELECT count_substrings(',,a,b,c,', ',');
+-----------------------------------+
| count_substrings(',,a,b,c,', ',') |
+-----------------------------------+
| 5 |
+-----------------------------------+
  1. 重叠子串的情况
SELECT count_substrings('ccc', 'cc');
+--------------------------------+
| count_substrings('ccc', 'cc') |
+--------------------------------+
| 1 |
+--------------------------------+
  1. NULL 值处理
SELECT count_substrings(NULL, ',');
+-----------------------------+
| count_substrings(NULL, ',') |
+-----------------------------+
| NULL |
+-----------------------------+
  1. 空字符串处理
SELECT count_substrings('a,b,c,abcde', '');
+-------------------------------------+
| count_substrings('a,b,c,abcde', '') |
+-------------------------------------+
| 0 |
+-------------------------------------+
  1. 使用起始位置参数
SELECT count_substrings('你好,世界!你好,世界!', '世界', 1), 
count_substrings('你好,世界!你好,世界!', '世界', 6);
+-----------------------------------------------------------------------+-----------------------------------------------------------------------+
| count_substrings('你好,世界!你好,世界!', '世界', 1) | count_substrings('你好,世界!你好,世界!', '世界', 6) |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------+
| 2 | 1 |
+-----------------------------------------------------------------------+-----------------------------------------------------------------------+
  1. 起始位置超出范围
SELECT count_substrings('你好,世界!你好,世界!', '世界', 0), 
count_substrings('你好,世界!你好,世界!', '世界', 30);
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| count_substrings('你好,世界!你好,世界!', '世界', 0) | count_substrings('你好,世界!你好,世界!', '世界', 30) |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+
| 0 | 0 |
+-----------------------------------------------------------------------+------------------------------------------------------------------------+