MySQL用省略号截断文本

时间:2011-06-17 09:54:43

标签: mysql text trim ellipsis

假设我有一个列为一列的MySQL表:“消息”。它是TEXT类型。 我现在想查询所有行,但文本可能很大(不是很大但很大),我只想得到它们的摘要。例如,结果可以填充到列表中。

有没有办法将文本修剪为特定长度(例如10个字符),如果文本被修剪则添加省略号?

例如:

Message
-----------
12345678901234
1234567890
12345
12345678901

查询结果:

1234567...
1234567890
12345
1234567...

谢谢!

6 个答案:

答案 0 :(得分:22)

select case when length(message) > 7 
then concat(substring(message, 1, 7), '...')
else message end as adapted_message
from ...

测试/确认:

SELECT CASE WHEN LENGTH('1234567890') > 7 
THEN CONCAT(SUBSTRING('1234567890', 1, 7), '...') 
ELSE '1234567890' END AS adapted_message

UNION  

SELECT CASE WHEN LENGTH('12345') > 7 
THEN CONCAT(SUBSTRING('12345', 1, 7), '...') 
ELSE '12345' END AS adapted_message

答案 1 :(得分:5)

...或

SELECT CONCAT(LEFT(message, 7), IF(LENGTH(message)>7, "…", ""))
FROM table

答案 2 :(得分:4)

这是一个简单的单行解决方案:

IF(CHAR_LENGTH(message) > 10, CONCAT(LEFT(message, 7),"..."), message)

答案 3 :(得分:0)

查看MySQL字符串函数,记录here。您应该能够使用substringconcat的某种组合来实现您想要的行为。

答案 4 :(得分:0)

我的方法:

  • 让x表示要显示的最大字符数(因此x + 3点将是显示的最长字符串)
  • 您总是想要LEFT(field,x)
  • 如果LENGTH(field)> x + 3,请附加3个点
  • 否则,如果LENGTH(field)> x,则追加字段的其余部分
for l in range(3,8,1):
     seq=np.arange(0,20)
     X=stats.poisson(l)
     seq_pmf = X.pmf(seq)
     plt.plot(seq, seq_pmf,label=l)
plt.legend()
plt.show()

答案 5 :(得分:0)

您可以声明一个新的ELLIPSIS函数以使您的查询可读:

DELIMITER //

CREATE FUNCTION ELLIPSIS ( str TEXT, max_length INT )
RETURNS TEXT

BEGIN
   DECLARE str_out TEXT;

   IF LENGTH(str) <= max_length THEN
      SET str_out = str;
      
   ELSE
      SET str_out = CONCAT(SUBSTR(str, 1, max_length), '...');

   END IF;
   
   RETURN str_out;

END; //

DELIMITER ;

然后您只需做:

SELECT ELLIPSIS(Message, 10);