MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment tronquer du texte avec une ellipse dans MariaDB

Parfois, vous pouvez constater que la quantité de texte renvoyée dans une colonne de base de données est trop longue. Vous voudrez peut-être simplement renvoyer un court extrait de ce texte, suivi de points de suspension ou de trois points.

Heureusement, c'est relativement facile à faire dans MariaDB.

Trois périodes

Voici un exemple d'ajout de trois points (au lieu d'un caractère points de suspension) à une colonne chaque fois que le nombre de caractères dans cette colonne dépasse une certaine longueur :

SELECT 
    IF(CHAR_LENGTH(ProductDescription) > 32, 
        CONCAT(LEFT(ProductDescription, 32),"..."), 
        ProductDescription) AS "Short Desc",
    ProductDescription AS "Full Desc"
FROM Products;

Résultat :

+-------------------------------------+-----------------------------------------+
| Short Desc                          | Full Desc                               |
+-------------------------------------+-----------------------------------------+
| Purple. Includes left handed car... | Purple. Includes left handed carry box. |
| Blue. Includes right handed carr... | Blue. Includes right handed carry box.  |
| Approximate 45 minute waiting pe... | Approximate 45 minute waiting period.   |
| Approximate 30 minute waiting pe... | Approximate 30 minute waiting period.   |
| Wooden handle. Free wine glasses... | Wooden handle. Free wine glasses.       |
| Orange. Includes spare fingers.     | Orange. Includes spare fingers.         |
| Tied with vines. Very chewable.     | Tied with vines. Very chewable.         |
| Brown ceramic with solid handle.    | Brown ceramic with solid handle.        |
+-------------------------------------+-----------------------------------------+

Dans ce cas, nous utilisons le CHAR_LENGTH() fonction à l'intérieur d'un IF() pour déterminer si la chaîne est suffisamment longue pour justifier de la raccourcir. Nous utilisons ensuite le LEFT() fonction à l'intérieur du CONCAT() fonction pour ajouter quelques points à la courte description.

Utiliser un caractère de suspension réel

Et le revoilà, mais avec un vrai caractère ellipse au lieu de trois points :

SELECT 
    IF(CHAR_LENGTH(ProductDescription) > 32, 
        CONCAT(LEFT(ProductDescription, 32),"…"), 
        ProductDescription) AS "Short Desc",
    ProductDescription AS "Full Desc"
FROM Products;

Résultat :

+-------------------------------------+-----------------------------------------+
| Short Desc                          | Full Desc                               |
+-------------------------------------+-----------------------------------------+
| Purple. Includes left handed car…   | Purple. Includes left handed carry box. |
| Blue. Includes right handed carr…   | Blue. Includes right handed carry box.  |
| Approximate 45 minute waiting pe…   | Approximate 45 minute waiting period.   |
| Approximate 30 minute waiting pe…   | Approximate 30 minute waiting period.   |
| Wooden handle. Free wine glasses…   | Wooden handle. Free wine glasses.       |
| Orange. Includes spare fingers.     | Orange. Includes spare fingers.         |
| Tied with vines. Very chewable.     | Tied with vines. Very chewable.         |
| Brown ceramic with solid handle.    | Brown ceramic with solid handle.        |
+-------------------------------------+-----------------------------------------+

Les points de suspension utilisent moins d'espace. C'est parce qu'il s'agit d'un seul caractère, par opposition aux trois points (qui sont trois caractères distincts).

Tronquer TOUTES les lignes, quelle que soit leur longueur

Si vous devez tronquer toutes les lignes, quelle que soit leur longueur, vous n'avez pas besoin d'inclure le IF() fonction.

Dans ce cas, le code peut être raccourci à quelque chose comme ceci :

SELECT 
    CONCAT(LEFT(ProductDescription, 15), '...') AS "Short Desc",
    ProductDescription AS "Full Desc"
FROM Products;

Résultat :

+--------------------+-----------------------------------------+
| Short Desc         | Full Desc                               |
+--------------------+-----------------------------------------+
| Purple. Include... | Purple. Includes left handed carry box. |
| Blue. Includes ... | Blue. Includes right handed carry box.  |
| Approximate 45 ... | Approximate 45 minute waiting period.   |
| Approximate 30 ... | Approximate 30 minute waiting period.   |
| Wooden handle. ... | Wooden handle. Free wine glasses.       |
| Orange. Include... | Orange. Includes spare fingers.         |
| Tied with vines... | Tied with vines. Very chewable.         |
| Brown ceramic w... | Brown ceramic with solid handle.        |
+--------------------+-----------------------------------------+

Omettre les points de suspension

Et si vous n'avez même pas besoin des points de suspension/trois périodes, vous pouvez même les raccourcir davantage, à quelque chose comme ceci :

SELECT 
    LEFT(ProductDescription, 15) AS "Short Desc",
    ProductDescription AS "Full Desc"
FROM Products;

Résultat :

+-----------------+-----------------------------------------+
| Short Desc      | Full Desc                               |
+-----------------+-----------------------------------------+
| Purple. Include | Purple. Includes left handed carry box. |
| Blue. Includes  | Blue. Includes right handed carry box.  |
| Approximate 45  | Approximate 45 minute waiting period.   |
| Approximate 30  | Approximate 30 minute waiting period.   |
| Wooden handle.  | Wooden handle. Free wine glasses.       |
| Orange. Include | Orange. Includes spare fingers.         |
| Tied with vines | Tied with vines. Very chewable.         |
| Brown ceramic w | Brown ceramic with solid handle.        |
+-----------------+-----------------------------------------+