商水县住房城乡建设网站,百度推广智能网站,股票网站模板 dedecms,网站做好后还需要维护吗oracle中关于中文占用字节数#xff0c;不同的数据库有不同的情况#xff0c;有的占用两个字节、有的占用三个字节#xff0c;现在测试环境的数据库中文占用三个字节#xff0c;要实现由中英文组成的段落字符串#xff0c;按照每行占用多少字节重新分段#xff0c;具体应…oracle中关于中文占用字节数不同的数据库有不同的情况有的占用两个字节、有的占用三个字节现在测试环境的数据库中文占用三个字节要实现由中英文组成的段落字符串按照每行占用多少字节重新分段具体应用是在润乾报表展现。由于中文字符占用三个字节一个字符英文字符及数字占用一个字节一个字符通过字符去判定一行多少字最后会出现全部汉字的一行跟全部数字的一行无法对其的情况所以最终考虑用字节去判定一行占用字节数最后段落划分以及对齐都能满足需求。具体实例实现一、数据库中字段存储的原始值二、通过函数调用实现需求select FUN_STR_SPLIT(k.COMMENTS) as text_COMMENTS_first from table_name k;CREATE OR REPLACE FUNCTION FUN_STR_SPLIT(pStr IN VARCHAR2)RETURN VARCHAR2 ASV_LENGTH NUMBER;--字符长度V_STR VARCHAR2(4000);V_STR_T VARCHAR2(4000);V_STR_RET VARCHAR2(4000);V_TEMP VARCHAR2(4000);V_TEMP_CHAR VARCHAR2(20);V_TEMP_CHAR_T VARCHAR2(20);V_TEMP_CHAR_W VARCHAR2(20);V_COUNT NUMBER;--回车数量V_COUNT_CH NUMBER;--中文占用字节数V_COUNT_NUM NUMBER;--是否是汉字判断V_COUNT_CH_NUM NUMBER;--中文标点I NUMBER;J NUMBER;BEGINI :1;J :1;V_COUNT :0;--将字符串中回车 换成 --SELECT REPLACE(REPLACE(PSTR,CHR(10),), ,) INTO V_TEMP FROM DUAL;SELECT REPLACE(PSTR,CHR(10),) INTO V_TEMP FROM DUAL;--计算字符长度SELECT LENGTH(V_TEMP) INTO V_LENGTH FROM DUAL;--计算中文占用字节数SELECT LENGTHB(啊) INTO V_COUNT_CH FROM DUAL;--循环判断字符WHILE I V_LENGTH1 LOOP--获取对应位置字符V_TEMP_CHAR:SUBSTR(V_TEMP,I,1);--判断是否是中文select instr(1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!#$%^*();:/?,,upper(V_TEMP_CHAR)) into V_COUNT_CH from dual;if j 72 then--如果是中文 (中文占用三个字节)if V_COUNT_CH 0 then--判断当前字符的下一个是不是V_TEMP_CHAR_T:SUBSTR(V_TEMP,I1,1);if V_TEMP_CHAR_T V_TEMP_CHAR:SUBSTR(V_TEMP,I,5);V_STR :V_STR||V_TEMP_CHAR;J :1;I :I5;V_COUNT :V_COUNT1;elseV_STR :V_STR||V_TEMP_CHAR;i :i1;j :j1;end if;else--判断当前字符的下一个是不是V_TEMP_CHAR_T:SUBSTR(V_TEMP,I1,1);if V_TEMP_CHAR_T V_TEMP_CHAR:SUBSTR(V_TEMP,I,5);V_STR :V_STR||V_TEMP_CHAR;J :1;I :I5;V_COUNT :V_COUNT1;elseV_STR :V_STR||V_TEMP_CHAR;i :i1;j :j3;end if;end if;else--判断当前字符的下一个是不是V_TEMP_CHAR_T:SUBSTR(V_TEMP,I1,1);--判断当前字符的下下一个是不是V_TEMP_CHAR_W:SUBSTR(V_TEMP,I2,1);if V_TEMP_CHAR_T V_TEMP_CHAR:SUBSTR(V_TEMP,I,5);V_STR :V_STR||V_TEMP_CHAR;J :1;I :I5;V_COUNT :V_COUNT1;elsif V_TEMP_CHAR_T chr(13) thenif V_TEMP_CHAR_W V_TEMP_CHAR:SUBSTR(V_TEMP,I,5);V_STR :V_STR||V_TEMP_CHAR;J :1;I :I5;V_COUNT :V_COUNT1;end if;else--判断中文标点select instr(。.,upper(V_TEMP_CHAR_T)) into V_COUNT_CH_NUM from dual;if V_COUNT_CH_NUM 0 thenV_STR :V_STR||V_TEMP_CHAR||V_TEMP_CHAR_T||;J:1;I :I2;V_COUNT :V_COUNT1;elseV_STR :V_STR||V_TEMP_CHAR||;J:1;I :I1;V_COUNT :V_COUNT1;end if;end if;end if;END LOOP;RETURN(V_STR);END FUN_STR_SPLIT;三、通过函数转换后查询值四、转后字段在润乾中展现效果