假设我有一个列为一列的MySQL表:“消息”。它是TEXT类型。 我现在想查询所有行,但文本可能很大(不是很大但很大),我只想得到它们的摘要。例如,结果可以填充到列表中。
有没有办法将文本修剪为特定长度(例如10个字符),如果文本被修剪则添加省略号?
例如:
Message
-----------
12345678901234
1234567890
12345
12345678901
查询结果:
1234567...
1234567890
12345
1234567...
谢谢!
答案 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。您应该能够使用substring
和concat
的某种组合来实现您想要的行为。
答案 4 :(得分:0)
我的方法:
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);