Понякога може да откриете, че количеството текст, върнат в колона на база данни, е твърде дълго. Може просто да искате да върнете кратък фрагмент от този текст, последван от многоточие или три точки.
За щастие това е сравнително лесно да се направи в MariaDB.
Три периода
Ето пример за добавяне на три точки (вместо многоточие) към колона, когато броят на знаците в тази колона надвиши определена дължина:
SELECT
IF(CHAR_LENGTH(ProductDescription) > 32,
CONCAT(LEFT(ProductDescription, 32),"..."),
ProductDescription) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Резултат:
+-------------------------------------+-----------------------------------------+ | 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. | +-------------------------------------+-----------------------------------------+
В този случай използваме CHAR_LENGTH()
функция вътре в IF()
функция, за да определи дали низът е достатъчно дълъг, за да оправдае съкращаването му. След това използваме LEFT()
функция вътре в CONCAT()
функция за добавяне на няколко точки към краткото описание.
Използване на действителен многоточие
И ето го отново, но с действителен многоточия вместо три точки:
SELECT
IF(CHAR_LENGTH(ProductDescription) > 32,
CONCAT(LEFT(ProductDescription, 32),"…"),
ProductDescription) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Резултат:
+-------------------------------------+-----------------------------------------+ | 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. | +-------------------------------------+-----------------------------------------+
Многоточината използва по-малко място. Това е така, защото това е един знак, за разлика от трите точки (които са три отделни знака).
Отрязване на ВСИЧКИ редове, независимо от дължината
Ако трябва да съкратите всички редове, независимо от тяхната дължина, не е необходимо да включвате IF()
функция.
В този случай кодът може да бъде съкратен до нещо подобно:
SELECT
CONCAT(LEFT(ProductDescription, 15), '...') AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Резултат:
+--------------------+-----------------------------------------+ | 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. | +--------------------+-----------------------------------------+
Пропуснете многоточината
И ако дори не се нуждаете от многоточие/три точки, тогава можете дори да го съкратите допълнително до нещо подобно:
SELECT
LEFT(ProductDescription, 15) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Резултат:
+-----------------+-----------------------------------------+ | 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. | +-----------------+-----------------------------------------+