Sql 对字符及其在字符串中的位置进行计数
我有一根像“ABC”的线。我需要找出“#”的位置,然后找出后面有多少个“#”。例如,在这种情况下,输出应该是Sql 对字符及其在字符串中的位置进行计数,sql,oracle,plsql,Sql,Oracle,Plsql,我有一根像“ABC”的线。我需要找出“#”的位置,然后找出后面有多少个“#”。例如,在这种情况下,输出应该是 position count ======= ====== 1 3 7 2 是否可以在sql语句中执行此操作,或者我们需要在此处使用plsql块?以下是在sql语句中执行此操作的一种方法: WITH sample_data AS (SELECT '###ABC##DE' str FROM dual UNION ALL
position count
======= ======
1 3
7 2
是否可以在sql语句中执行此操作,或者我们需要在此处使用plsql块?以下是在sql语句中执行此操作的一种方法:
WITH sample_data AS (SELECT '###ABC##DE' str FROM dual UNION ALL
SELECT 'A#B#C#D#E##' str FROM dual UNION ALL
SELECT 'ABCDE' str FROM dual)
SELECT str,
NVL(length(regexp_substr(str, '#+', 1, LEVEL)), 0) num_hashes,
regexp_instr(str, '#+', 1, LEVEL) hash_pos
FROM sample_data
CONNECT BY regexp_substr(str, '#+', 1, LEVEL) IS NOT NULL
AND PRIOR str = str
AND PRIOR sys_guid() IS NOT NULL;
STR NUM_HASHES HASH_POS
----------- ---------- ----------
###ABC##DE 3 1
###ABC##DE 2 7
A#B#C#D#E## 1 2
A#B#C#D#E## 1 4
A#B#C#D#E## 1 6
A#B#C#D#E## 1 8
A#B#C#D#E## 2 10
ABCDE 0 0
这样做的目的是使用分层查询(即
connectby
部分)遍历字符串并搜索1个或多个字符。它将为每个组输出一行。以下是在SQL语句中执行此操作的方法:
WITH sample_data AS (SELECT '###ABC##DE' str FROM dual UNION ALL
SELECT 'A#B#C#D#E##' str FROM dual UNION ALL
SELECT 'ABCDE' str FROM dual)
SELECT str,
NVL(length(regexp_substr(str, '#+', 1, LEVEL)), 0) num_hashes,
regexp_instr(str, '#+', 1, LEVEL) hash_pos
FROM sample_data
CONNECT BY regexp_substr(str, '#+', 1, LEVEL) IS NOT NULL
AND PRIOR str = str
AND PRIOR sys_guid() IS NOT NULL;
STR NUM_HASHES HASH_POS
----------- ---------- ----------
###ABC##DE 3 1
###ABC##DE 2 7
A#B#C#D#E## 1 2
A#B#C#D#E## 1 4
A#B#C#D#E## 1 6
A#B#C#D#E## 1 8
A#B#C#D#E## 2 10
ABCDE 0 0
这样做的目的是使用分层查询(即
connectby
部分)遍历字符串并搜索1个或多个字符。它将为每个组输出一行。您可以使用脚本将查询结果存储在一个数组中,然后执行事件搜索,以查找要查找的值的每个事件,并返回每个事件所在的索引。您可以使用脚本将查询结果存储在一个数组中,然后对其执行事件搜索查找要查找的值的每个匹配项,并返回每个匹配项所在的索引。。