各位好,我的一张表A里有这么个字段NUM,字符型,其值如下:    1,8,11,17,20,28,31,34,75,4,44,47,57,14,26,38,53,60,63,65,68存储的是用逗号隔开的一些数字,我现在想通过sql查询这个字段中值小于50的数字的个数。请问有什么好方法吗?

解决方案 »

  1.   

    SQL> WITH tt AS
      2   (SELECT '1,8,11,17,20,28,31,34,75,4,44,47,57,14,26,38,53,60,63,65,68' num
      3      FROM dual)
      4  SELECT COUNT(*)
      5    FROM (SELECT regexp_substr(num, '[^,]+', 1, LEVEL) num
      6            FROM tt
      7          CONNECT BY LEVEL <= length(num) - length(REPLACE(num, ',')))
      8   WHERE num < 50;
     
      COUNT(*)
    ----------
            14
     
    SQL> 
      

  2.   

    --上面少了一项
    SQL> WITH tt AS
      2   (SELECT '1,8,11,17,20,28,31,34,75,4,44,47,57,14,26,38,53,60,63,65,68' num
      3      FROM dual)
      4  SELECT COUNT(*)
      5    FROM (SELECT regexp_substr(num, '[^,]+', 1, LEVEL) num
      6            FROM tt
      7          CONNECT BY LEVEL <= length(num) - length(REPLACE(num, ',')) + 1)
      8   WHERE num < 50;
     
      COUNT(*)
    ----------
            14
     
    SQL>