利用oracle substr函数拆分,不会把汉字拆成两半的
substr 是按字符拆分的,而不是字节

解决方案 »

  1.   

    利用oracle lengthb函数可以获得字符的字节数
      

  2.   

    Delphi里也可以按字符分,只不过我想在一个字段里尽可能多的保存一些文本而已,因为字段总数只有5个,如果全部是英文的话,总共就只能保存5000个字符了,如果可以判断多少中英文,全是英文的情况就可以保存15000个字符
      

  3.   

    从1000个字符开始试,一次增加一个字符
    通过oracle lengthb函数获取字节数,字节数超出则停止
    将之前取得的字符串存入字段
    然后从剩下的字符中用同样方法获取下一个字段
           
      

  4.   

    还有一种写起来比较麻烦,通过select语句获取分割点
    假设字符串为str
    WITH T AS (
    select ,ROWNUM RN,LENGTHB(substr(str,rownum,1)) L from dual
    CONNECT BY ROWNUM<=LEAST(5000,LENGTH(STR))
    )
    SELECT max(RN) 字符数,SUBSTR(STR,1,MAX(RN)) 截取的第一个字符串 FROM
    (SELECT RN,L,SUM(L)OVER(ORDER BY RN) S
    FROM T)
    WHERE S<=5000
      

  5.   

    上面多写了个逗号,另外你字段长度为3000,我写的5000,修正下,你去执行下试试
    WITH T AS (
    select ROWNUM RN,LENGTHB(substr(str,rownum,1)) L from dual
    CONNECT BY ROWNUM<=LEAST(3000,LENGTH(STR))
    )
    SELECT max(RN) 字符数,SUBSTR(STR,1,MAX(RN)) 截取的第一个字符串 FROM
    (SELECT RN,SUM(L)OVER(ORDER BY RN) S
    FROM T)
    WHERE S<=3000