我现在有这样的一个问题
我现在想取140XX 至 1739 之间的数据 我解释一下是什么意思
那个xx就是说可以有也可以没有 有的话就是从0-9 可以有一个 也可以有两个
举个例子 就是说 140是满足的  1400也是满足的 14000也是满足的条件
也就是说一直到17389 都是这样的一个条件 可以是1738,也可以是17379
 但是到1739的时候只能是1739不能是17390一类的也不知道大家明不明白 我感觉我说的都不是太明白
大家看看哪不明白 在回复的时候提出来
我再给大家做解释

解决方案 »

  1.   

    用正则表达式怎么写啊 ???
    这是我写的一部分 也不知道对不对
     regexp_like(dx1,'^1[4-6][0-9]{1,3}') or regexp_like(dx1,'^17[0-2][0-9]{0,2}')
    但是现在的这个正则里面没有包括 173[0-8][0-9]的内容 这段我不知道怎么写来着 因为[0-8][0-9]都是可有可无的啊 如果要是 173[0-8][0-9]{0,1} 那就是说[0-9]有0到1次  因为173也是满足条件的 1738也是满足条件的 还有就是17389也是满足条件的 
    这样该怎么写这个正则啊
      

  2.   

    select *
      from table_name
     where substr(col_xx, 0, 3) >= 140
       and substr(col_xx, 0, 4) <=1739
       and substr(col_xx, 0, 5) <17390是这个意思吗?不知道你的数值长度也没有限制?
      

  3.   

    如果只会出现数字,没有其他字符时,可以用下面的条件
    dx1 between '140' and '1739'
      

  4.   

    你没有看明白…… 
    不是这么简单的  还有17389也是符合条件的呢 
    不是between and 那么简单的
      

  5.   

    select * from tablename where regexp_like(column,'^1[4-6][0-9]{1,3}|17[0-3][0-8][0-9]{0,1}|1739$');
      

  6.   


    regexp_like(dx1,'^1[4-6][0-9]{1,3}') or regexp_like(dx1,'^17[0-2][0-9]{0,2}')
    但是现在的这个正则里面没有包括 173[0-8][0-9]的内容 这段我不知道怎么写来着 因为[0-8][0-9]都
    是可有可无的啊 如果要是 173[0-8][0-9]{0,1} 那就是说[0-9]有0到1次  因为173也是满足条件的
     1738也是满足条件的 还有就是17389也是满足条件的 
    这样该怎么写这个正则啊
      

  7.   

    to_char(dx1) between '140' and '1739' 
      

  8.   

    #5修改下:
    select * from tablename where regexp_like(column,'^1[4-6][0-9]{1,3}|17[0-3][0-8]{0,1}[0-9]{0,1}|1739$');
      

  9.   

    regexp_like(a,'^1[4-6][[:digit:]]{2,}|^173[0-8][0-9]*|^17[0-2][0-9]+|^1739$')
    这样呢?
      

  10.   

    regexp_like(a,'^1[4-6][[:digit:]]{2,3}|^173[0-8][0-9]$|^17[0-2][0-9]{1,2}|^1739$')
    这个差不多吧
    不过楼主直接用<和>比较字符串不是更好
      

  11.   

    我还有一个问题 为什么我的sql语句使用了正则表达式以后就不使用位图索引了 select distinct mbrid from fi04 where
     dx1 between '17400' and '17499' or dx1 = '2330' or dx2 between '17400' and '17499'
    or dx2 = '2330'or dx3 between '17400' and '17499' or dx3 = '2330'
     or dx4 between '17400' and '17499' or dx4 = '2330'or dx5 between '17400'
     and '17499' or dx5 = '2330'or dx6 between '17400' and '17499' or dx6 = '2330'
     or dx7 between '17400' and '17499' or dx7 = '2330'or dx8 between '17400' and '17499' or dx8 = '2330'or dx9 between '17400' and '17499' or dx9 = '2330'这个是以前的sql语句 这个就是执行位图索引的 select mbrid from fi04 where
     regexp_like(dx1,'^174[0-9]{0,2}$') or dx1 = '2330' or regexp_like(dx2,'^174[0-9]{0,2}$') or dx2 = '2330'or regexp_like(dx3,'^174[0-9]{0,2}$') or dx3 = '2330'
     or regexp_like(dx4,'^174[0-9]{0,2}$') or dx4 = '2330'or regexp_like(dx5,'^174[0-9]{0,2}$') or dx5 = '2330'or regexp_like(dx6,'^174[0-9]{0,2}$') or dx6 = '2330'
     or regexp_like(dx7,'^174[0-9]{0,2}$') or dx7 = '2330'or regexp_like(dx7,'^174[0-9]{0,2}$') or dx8 = '2330'or regexp_like(dx9,'^174[0-9]{0,2}$') or dx9 = '2330'这个就是用正则改过之后的查询  这个就不执行位图索引
    为什么啊??
    怎么才能让他使用为图索引啊
      

  12.   

    模式匹配不在走索引了,虽然不绝对,但是regexp_like和like是一样的