Czasami może się okazać, że ilość tekstu zwróconego w kolumnie bazy danych jest zbyt długa. Możesz po prostu zwrócić krótki fragment tego tekstu, po którym następuje wielokropek lub trzy kropki.
Na szczęście jest to stosunkowo łatwe w MariaDB.
Trzy okresy
Oto przykład dołączania trzech kropek (zamiast znaku wielokropka) do kolumny, gdy liczba znaków w tej kolumnie przekracza określoną długość:
SELECT
IF(CHAR_LENGTH(ProductDescription) > 32,
CONCAT(LEFT(ProductDescription, 32),"..."),
ProductDescription) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Wynik:
+-------------------------------------+-----------------------------------------+ | 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. | +-------------------------------------+-----------------------------------------+
W tym przypadku używamy CHAR_LENGTH()
funkcja wewnątrz IF()
funkcja określająca, czy ciąg jest wystarczająco długi, aby uzasadnić jego skrócenie. Następnie używamy LEFT()
funkcja wewnątrz CONCAT()
funkcja dodawania kilku kropek do krótkiego opisu.
Korzystanie z rzeczywistego znaku wielokropka
I znowu, ale z prawdziwym wielokropkiem zamiast trzech kropek:
SELECT
IF(CHAR_LENGTH(ProductDescription) > 32,
CONCAT(LEFT(ProductDescription, 32),"…"),
ProductDescription) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Wynik:
+-------------------------------------+-----------------------------------------+ | 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. | +-------------------------------------+-----------------------------------------+
Wielokropek zajmuje mniej miejsca. Dzieje się tak, ponieważ jest to pojedynczy znak, w przeciwieństwie do trzech kropek (które są trzema oddzielnymi znakami).
Obetnij WSZYSTKIE rzędy, niezależnie od długości
Jeśli chcesz skrócić wszystkie wiersze, niezależnie od ich długości, nie musisz uwzględniać IF()
funkcja.
W takim przypadku kod można skrócić do czegoś takiego:
SELECT
CONCAT(LEFT(ProductDescription, 15), '...') AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Wynik:
+--------------------+-----------------------------------------+ | 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. | +--------------------+-----------------------------------------+
Pomiń wielokropek
A jeśli nie potrzebujesz nawet wielokropka/trzech kropek, możesz go jeszcze bardziej skrócić, do czegoś takiego:
SELECT
LEFT(ProductDescription, 15) AS "Short Desc",
ProductDescription AS "Full Desc"
FROM Products;
Wynik:
+-----------------+-----------------------------------------+ | 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. | +-----------------+-----------------------------------------+