我正在使用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作为我的脚本语言。
答案 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注意到的效果:你有阅读本评论的其余部分链接,只是为了接收故事的最后一个字。
如果检索故事其余部分的方法比故事本身占用更多空间,用户将会感到恼火。