带点的子串

时间:2011-01-25 15:46:43

标签: php sql mysql

我正在使用SUBSTRING函数来检索邮件正文的“摘录”:

SELECT m.id, m.thread_id, m.user_id, SUBSTRING(m.body, 1, 100) AS body, m.sent_at
FROM message m;

我想要做的是在子字符串的末尾添加3个点,但前提是源字符串超过我的上限(100个字符),即子字符串必须切断字符串。如果源字符串少于100个字符,则无需在末尾添加任何点。

我使用PHP作为我的脚本语言。

2 个答案:

答案 0 :(得分:8)

可以使用以下命令在查询而不是PHP中完成:

SELECT m.id, m.thread_id, m.user_id, 
       CASE 
         WHEN CHAR_LENGTH(m.body) > 100 THEN CONCAT(SUBSTRING(m.body, 1, 100), '...')
         ELSE m.body
       END AS body, 
       m.sent_at
  FROM MESSAGE m

三个尾随点的术语是“省略号”。

答案 1 :(得分:1)

要求101个字符。如果您收到101个字符,则您的资源字符串肯定超过100个字符。在这种情况下,删除所选脚本语言中的最后一个字符并添加“...”。这会稍微减轻你的DB。

我个人建议你创造一些差异。例如。当且仅当你超过110个字符时(当然要求110 + 1个字符),切断90个字符。否则你有时会得到Slashdot注意到的效果:你有阅读本评论的其余部分链接,只是为了接收故事的最后一个字。

如果检索故事其余部分的方法比故事本身占用更多空间,用户将会感到恼火。