Thinkcmf截取内容长度

本文介绍了两种不同的字符串截取方法:msubstr 和 mb_substr。msubstr 方法会在截取后的字符串末尾添加省略号,不论实际是否超出指定长度;而 mb_substr 则仅在超出长度时进行截断,不添加额外字符。这两种方法适用于不同场景,帮助开发者更灵活地处理字符串显示。

例1:

{$vo.post_title|msubstr=0,10}

截取标题,msubstr=0,10,数字表示截取的字符串长度,显示省略号,但无论长度是否超过截取的长度都会出现省略号;

例2:

{$vo.post_title|mb_substr=0,15,'utf-8'}
mb_substr=0,15,'utf-8',设置同上,超过部分截取,但不会显示省略号。
在Oracle中,有多种方法可以截取指定长度内容。 ### 使用`substr`函数 `substr`函数的基本语法为`substr(字符串, 截取开始位置, 截取长度)`。如果最后一个截取长度参数为空,则表示从截取开始位置起截到最末;如果截取开始位置为大于0的数字,则表示从字符串左数几位开始;如果截取开始位置为小于0的数字,则表示从字符串右数几位开始。例如,要截取字符串`'abcdefg'`从第2个位置开始的3个字符,可以使用以下代码: ```sql SELECT substr('abcdefg', 2, 3) FROM dual; ``` 此代码将返回`'bcd'`。若省略截取长度参数,如`SELECT substr('abcdefg', 2) FROM dual;`,将返回从第2个位置开始到字符串末尾的内容,即`'bcdefg'` [^1] [^4]。 ### 使用自定义函数 可以创建一个自定义函数来实现截取指定长度的字符,考虑字符的字节长度等情况。以下是一个示例函数: ```sql --Function --去掉前后空格,截取字符,字符长度为P_Length create or replace function get_StringLen ( P_Name IN VARCHAR2, P_Length IN int ) return varchar2 is v_Temp varchar2(1000) := ''; v_Name varchar2(1000) := ''; v_Len int := 0; i int := 1; k int := 0; begin --去掉回车,换行符号 select trim(translate(P_Name,chr(13)||chr(10),',')) into v_Name from dual; --取字串的长度 select length(v_Name) into v_Len from dual; --循环来取 for i in reverse 1..v_Len loop if (lengthb(substr(v_Name,-i,1))<>length(substr(v_Name,-i,1))) then k := k + 2; else k := k + 1; end if; if k <= P_Length then v_Temp := v_Temp || substr(v_Name,-i,1); end if; if k >= P_Length then CONTINUE; end if; end loop; return(v_Temp); end get_StringLen; --Test select get_StringLen('asdf',5) from dual;--返回结果:'asdf' select get_StringLen('asd中国',5) from dual;--返回结果:'asd中' select get_StringLen('asdfasdf',5) from dual;--返回结果:'asdfa' ``` 该函数`get_StringLen`会去掉输入字符串的前后空格和回车、换行符号,然后根据指定的长度截取内容,能处理中文字符等不同字符情况 [^2]。 ### 在查询中使用`decode`和`substr`结合 在查询表数据时,可以结合`decode`和`substr`函数来根据字符串长度进行截取。例如,对于表`wt_activity_comment`中的`CONTENT`字段,若其长度超过60,则截取前60个字符并添加`......`,否则返回原内容: ```sql select decode(sign(length(T.CONTENT) - 60), 1, substr(T.CONTENT, 1, 60) || '......', -1, T.CONTENT) AS CONTENT from wt_activity_comment T; ``` 此查询会对表中每条记录的`CONTENT`字段进行判断和截取操作 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值