首页 > 数据库技术 > 详细

oracle数据库sql语句 通过分隔符求一个字段里的字符个数

时间:2021-06-28 09:51:31      阅读:28      评论:0      收藏:0      [点我收藏+]

问题描述:

通过分隔符求一个字段里的字符个数,例如,求id为1的type里面省份的个数;

技术分享图片

 

 

 sql语句如下:

SELECT COUNT(N.VALUE)
  FROM (SELECT M.NAME NAME, COUNT(NAME) VALUE
          FROM (SELECT REGEXP_SUBSTR(TS.type, ‘[^|]+‘, 1, L) AS NAME
                  FROM test_columns TS,
                       (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 1000)
                 WHERE L(+) <=
                       LENGTH(TS.type) - LENGTH(REPLACE(TS.type, ‘|‘)) + 1
                   and ts.id = ‘1‘) M
         WHERE NAME IS NOT NULL
         GROUP BY (M.NAME)
         ORDER BY COUNT(1) DESC) N

结果:

技术分享图片

 

 

 

剖析sql语句:

SELECT COUNT(N.VALUE)
  FROM (SELECT M.NAME NAME, COUNT(NAME) VALUE
          FROM (SELECT REGEXP_SUBSTR(TS.type, ‘[^|]+‘, 1, L) AS NAME    -->固定函数,REGEXP_SUBSTR() 函数中的 ‘[^|]+’ 是根据你的字段是以什么隔开的;
                  FROM test_columns TS,
                       (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 1000)
                 WHERE L(+) <=
                       LENGTH(TS.type) - LENGTH(REPLACE(TS.type, ‘|‘)) + 1   -->WHERE条件中的(+)必须加上、否则 TS.NAME 字段为空的数据无法取得、而且加上(+)后、SQL执行效率能够提高几个数量级
但是这里由于我们需要筛选出TS.NAME字段为空的数据,所以后面加了NAME IS NOT NULL
and ts.id = ‘1‘) M WHERE NAME IS NOT NULL GROUP BY (M.NAME) ORDER BY COUNT(1) DESC) N

 

 

 错误做法:

技术分享图片

  

 

oracle数据库sql语句 通过分隔符求一个字段里的字符个数

原文:https://www.cnblogs.com/xie-qi/p/14942751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!