使用MYSQL将字符串长度限制为最小字符

时间:2013-02-10 15:08:54

标签: mysql sql

我需要从db中选择一些主题..我使用下面的代码来选择昏迷分隔的主题列表。

GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ', ') AS subjects,

没关系。它为我工作。它的输出是这样的。

  

数学,生理学,商业与管理会计研究,天主教

现在我需要将此字符串限制为35个字符,并且需要在字符串的末尾添加“...”。

就是这样。

Mathematics, Physiology, Business...

那么,我可以知道在选择查询时是否可以和mysql一起使用?

谢谢。

4 个答案:

答案 0 :(得分:1)

尝试这样的事情,

SELECT  IF(CHAR_LENGTH(subjects) > 35, CONCAT(LEFT(subjects,35), '...'), subjects),
        ...
FROM
(
    SELECT  GROUP_CONCAT( DISTINCT s.subject_name SEPARATOR ', ') AS subjects,
            ...
    FROM    tableName
    GROUP   BY ...
) s

在获得角色的长度时,我宁愿使用CHAR_LENGTH而不是LENGTH,因为......

答案 1 :(得分:1)

您可以使用CASE表达式来检查subjects的{​​{3}}。如果它超过35个字符,那么您可以应用LENGTH()CONCAT()来获取最后使用...的新值:

select  
   case 
     when length(subjects) > 35
     then concat(substr(subjects, 1, 35), '...')
     else subjects end as subjects
from
(
  select GROUP_CONCAT( DISTINCT subject_name SEPARATOR ', ') AS subjects
  from yourtable
) src

请参阅SUBSTRING()

返回:

|                               SUBJECTS |
------------------------------------------
| Mathematics, Physiology, Business &... |

答案 2 :(得分:0)

将substring / concat连接到group_concat

结果的末尾
concat(substring(group_concat(distinct s.subject_name SEPARATOR ', '), 35), '...') AS subjects,

通常,在使用框架时在应用程序中执行此操作会更容易。

答案 3 :(得分:0)

将结果存储在变量中,并在if子句中检查它是否超过32个字符。如果是这样,请选择它的前32个字符并将'...'连接到它。