2011-06-17 21 views
12

Supongamos que tengo una tabla MySQL de una columna: "Mensaje". Es de tipo TEXTO. Ahora quiero consultar todas las filas, pero el texto puede ser grande (no extremadamente grande pero grande) y solo quiero obtener un resumen de ellas. Por ejemplo, el resultado se puede completar en una lista.MySQL texto truncado con puntos suspensivos

¿Hay alguna manera de recortar el texto a una longitud específica (por ejemplo, 10 caracteres) y agregar puntos suspensivos si se recorta el texto? resultado

Message 
----------- 
123456789
1234567890 
12345 
12345678901 

Consulta::

Por ejemplo

1234567... 
1234567890 
12345 
1234567... 

Gracias!

Respuesta

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

para probar/confirmar:

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 
+0

impresionante. ¡Gracias! – javic

+0

Me pregunto si LEFT sería más rápido que SUBSTRING – Helto

+1

Puede usar 'char_length()' en lugar de 'length()' para asegurar que el truncamiento ocurra con la misma cantidad de caracteres ... 'length()' returns la longitud de la cadena en bytes y 'char_length()' devuelve la longitud en caracteres. – Andrew

0

Eche un vistazo a las funciones de cadena de MySQL, documentadas here. Debería poder usar alguna combinación de substring y concat para lograr el comportamiento deseado.

3

o ...

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

¡Gran respuesta! Sin embargo, es posible que desee reemplazar el carácter de puntos suspensivos por tres períodos, ya que no todas las codificaciones de caracteres admitirán ese carácter. – Andrew

+1

Este es un buen enfoque, pero funciona incorrectamente cuando el campo tiene entre 7 y 10 caracteres. – augurar

0

He aquí una sencilla solución de una línea:

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