我有这样一组数据
        10,破破,879789,489789789798,黑龙江省哈尔滨市
用insrt第二个逗号的位置是6,第三个逗号的位置是13
然后我用substr()截出来的内容是,879789,48978
为什么不是,879789,
如果要这样的结果就是substr(6,8)这是咋回事啊。。
select SUBSTR(content,INSTR(content,',',1,2),INSTR(content,',',1,3)) from  Item
取的是从第一个逗号到第二个逗号之间的内容啊。。
得出的是substr(6,13)
但为啥结果是,879789,48978

解决方案 »

  1.   

    substr(字符串,起始位置,要截取的字符串长度)
    最后个参数不写就是默认截到字符串尾
      

  2.   


    select SUBSTR(content,INSTR(content,',',1,2),INSTR(content,',',1,3)) from  Item 
    你这个当然不对喽,第一个,号是第六位,第二个是13位
    从第六位截取13位长度,你自己算一下,
    正确的select SUBSTR(content,INSTR(content,',',1,2),INSTR(content,',',1,3)-INSTR(content,',',1,2)) from  Item 
    如果要从,号后面开始截,后面的,号也不要
    select SUBSTR(content,INSTR(content,',',1,2)+1,INSTR(content,',',1,3)-INSTR(content,',',1,2)-1) from  Item 
      

  3.   

    substr(目标字符串,起始截取位置,要截取的字符串长度) 
      

  4.   

    这种方式使用普通的函数比较复杂,建议使用正则表达式匹配。
    答案如下:
    select regexp_substr(content,'[^,]+',1,2) from Item
    如果你想取得第2个逗号到第三个逗号之间的部分,直接把2改成3即可。
      

  5.   

    谢谢楼上的各位,在下现在要去吃饭,一会回来试下,如果成功了,那我就可以用SQL做分页了。
    要不我就参了要把数据读到内存中再分页。。