在Oracle SQL中,您可以使用REGEXP_SUBSTR函数来查找字符串中所有出现的位置。以下是一个查询语句,用于从给定的字符串中提取所有1的位置,并以逗号分隔的列表形式输出:
SELECT LISTAGG(REGEXP_SUBSTR('12341521\', '1', 1, LEVEL), ',') WITHIN GROUP (ORDER BY LEVEL) AS positions
FROM DUAL
CONNECT BY REGEXP_SUBSTR('12341521\', '1', 1, LEVEL) IS NOT NULL;
这个查询使用了CONNECT BY子句来递归地查找字符串中所有1的位置。LEVEL是CONNECT BY子句中的伪列,表示递归的层级。LISTAGG函数用于将所有找到的位置聚合成一个以逗号分隔的字符串。请注意,这个查询假设您要查找的是字符1,而不是一个正则表达式中的1。
执行上述查询,您将得到一个包含所有1位置的字符串,例如1,5,8。
----------------------------------------------------------------------------------------
您也可以使用Oracle的REGEXP_INSTR函数来实现这个需求。下面是一个示例的SQL查询语句:
sql
SELECT
LEVEL AS position
FROM
dual
CONNECT BY
REGEXP_INSTR('12341521', '1', 1, LEVEL) > 0
这个查询语句使用了CONNECT BY子句和LEVEL伪列来生成一个递归查询,通过REGEXP_INSTR函数来查找字符串中所有1的位置。最后,将结果作为位置输出。
请注意,这个查询语句是基于字符串中的位置来输出,所以结果是1,5,8,而不是索引位置+1。如果你需要索引位置+1的结果,请在查询结果上进行相应的处理。