ORACLE数据库,表中有个VARCHAR2类型的字段,存储的结构有数字,也有字符,我想查询数字中<5 的记录怎么写 ,一开始用我写了一个数字判断的函数用于过滤字段中的字符结果 但是加上运算符和数字执行就爆无效数字 请高手帮忙 谢谢

解决方案 »

  1.   


    WITH tab AS(
    SELECT '1' num FROM dual UNION ALL
    SELECT '3' num FROM dual UNION ALL
    SELECT '6' num FROM dual UNION ALL
    SELECT 'a' num FROM dual UNION ALL
    SELECT 'bc' num FROM dual UNION ALL
    SELECT 'd' num FROM dual 
    )
    SELECT * FROM (
        SELECT * FROM tab WHERE regexp_like(num,'[[:digit:]]')
    )
    WHERE num<5结果:
          NUM
        -------
          1
          
      

  2.   


    上面结果贴错了,少贴了3结果:
          NUM
        -------
          1
          3
      

  3.   

    paddy 兄对正则表达式用的很熟悉了啊,收藏了
      

  4.   

    我觉得二楼的还是有问题的,他的正则表达式只过滤了纯字母,比如要是‘12ac’这样的是过滤不成功的,楼主可以用这样的思路:把varchar2的字段全提出来,用to_number处理,如果能变成number的话就取出来,不能的话会报异常,楼主可以捕捉下异常就行。如果你按这个思路不行的话,我可以帮你写出来
      

  5.   

    10G可以 可以我的oracle 是9i的
      

  6.   


    你的记录是
    id
    asd1
    1select * from tb where translate(col,'asd',' ')+0<5select * from tb regexp_replace(col,'[[:alpha:]]','')<5还是
    1
    abc
    select * from tb where  regexp_like(col,'[[:digit:]]')
      

  7.   


    哪里嘛,晓得点皮毛而已,最近在学习正则表达式,我收藏了几篇网摘,minitoy空间转的,你可以看下,觉得还是很不错的。
      

  8.   

    自己搞定 了 我就纳闷了 为什么两个语句拼起来就报 无效数字
    select dlzh 登陆账号,t.NAME 姓名  from v_wz_hyb t where 1=1 and t.WZ_HYB_ID in(select r.WZ_HYB_ID,r.barcode,y.xmmc,y.xmjg from wz_hy_reg r,V_wz_result_item_Num y where  r.wz_hy_reg_id=y.wz_hy_reg_id and     r.jglx=99  and r.djsj   >= to_date('1910-11-10 00:00:00','yyyy-mm-dd hh24:mi:ss') and r.djsj <=to_date('2010-11-10 23:59:59','yyyy-mm-dd hh24:mi:ss')    and  y.xmmc='低密度脂蛋白胆固醇(LDL)'and  y.xmjg   <5 )