问个oracle的sql问题,从一个字符串‘12341521\',取出所有1的位置,输出为1,5,8

求助个sql查询

SQL yzmxYDx35608993 发布于 2024-1-24 21:28
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
yalinLv6中级互助
发布于2024-1-24 21:50(编辑于 2024-1-24 21:57)

在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的结果,请在查询结果上进行相应的处理。

最佳回答
0
shirokoLv6资深互助
发布于2024-1-25 09:12

SELECT  REGEXP_INSTR('12341521', '1', 1,LEVEL) AS position

FROM    dual

CONNECT BY     REGEXP_INSTR('12341521', '1', 1, LEVEL) > 0

image.png

  • 3关注人数
  • 178浏览人数
  • 最后回答于:2024-1-25 09:12
    请选择关闭问题的原因
    确定 取消
    返回顶部