0

我需要从数据库中选择一些主题。我使用下面的代码来选择逗号分隔的主题列表。

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

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

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

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

是这样的。

Mathematics, Physiology, Business...

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

谢谢你。

4

4 回答 4

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在获取字符长度时使用,因为...

于 2013-02-10T15:12:46.107 回答
1

您可以使用一个CASE表达式来检查LENGTH(). subjects如果它超过 35 个字符,那么您可以应用SUBSTRING()并在末尾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

请参阅SQL Fiddle with Demo

这将返回:

|                               SUBJECTS |
------------------------------------------
| Mathematics, Physiology, Business &... |
于 2013-02-10T15:14:27.280 回答
0

只需将其子串/连接到 group_concat 结果的末尾

concat(substring(group_concat(distinct s.subject_name SEPARATOR ', '), 35), '...') AS subjects,

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

于 2013-02-10T15:13:51.993 回答
0

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

于 2013-02-10T16:19:02.690 回答