Nogle gange kan du opleve, at mængden af tekst, der returneres i en databasekolonne, er for lang. Du vil måske bare returnere et kort udsnit af den tekst, efterfulgt af en ellipse eller tre prikker.
Heldigvis er dette relativt nemt at gøre i MariaDB.
Tre perioder
Her er et eksempel på tilføjelse af tre punktum (i stedet for et ellipsetegn) til en kolonne, når antallet af tegn i den kolonne overstiger en vis længde:
SELECT IF(CHAR_LENGTH(ProductDescription)> 32, CONCAT(LEFT(ProductDescription, 32),"...", ProductDescription) AS "Short Desc", ProductDescription AS "Full Desc"FROM Products;
Resultat:
+---------------------------------------------+-------- ----------------------------------+| Kort beskrivelse | Fuld beskrivelse |+---------------------------------------------+-------- ----------------------------------+| Lilla. Inkluderer venstrehåndsbil... | Lilla. Inkluderer venstrehåndskasse. || Blå. Inkluderer højrehåndsvogn... | Blå. Inkluderer højrehåndskasse. || Cirka 45 minutters ventetid på... | Cirka 45 minutters ventetid. || Cirka 30 minutters ventetid på... | Cirka 30 minutters ventetid. || Træhåndtag. Gratis vinglas... | Træhåndtag. Gratis vinglas. || Orange. Inkluderer ekstra fingre. | Orange. Inkluderer ekstra fingre. || Bundet med vinstokke. Meget tyggeligt. | Bundet med vinstokke. Meget tyggeligt. || Brun keramik med solidt håndtag. | Brun keramik med solidt håndtag. |+--------------------------------------------+----------- ------------------------------------+
I dette tilfælde bruger vi CHAR_LENGTH()
funktion inde i en IF()
funktion til at bestemme, om strengen er lang nok til at berettige en afkortning. Vi bruger derefter LEFT()
funktion inde i CONCAT()
funktion for at tilføje et par prikker til den korte beskrivelse.
Brug af et faktisk Ellipsis-tegn
Og her er det igen, men med et egentligt ellipsetegn i stedet for tre prikker:
SELECT IF(CHAR_LENGTH(ProductDescription)> 32, CONCAT(LEFT(ProductDescription, 32),"..."), ProductDescription) AS "Short Desc", ProductDescription AS "Full Desc"FROM Products;
Resultat:
+---------------------------------------------+-------- ----------------------------------+| Kort beskrivelse | Fuld beskrivelse |+---------------------------------------------+-------- ----------------------------------+| Lilla. Inkluderer venstrehåndsbil... | Lilla. Inkluderer venstrehåndskasse. || Blå. Inkluderer højrehåndsvogn… | Blå. Inkluderer højrehåndskasse. || Cirka 45 minutters ventetid på… | Cirka 45 minutters ventetid. || Cirka 30 minutters ventetid på… | Cirka 30 minutters ventetid. || Træhåndtag. Gratis vinglas... | Træhåndtag. Gratis vinglas. || Orange. Inkluderer ekstra fingre. | Orange. Inkluderer ekstra fingre. || Bundet med vinstokke. Meget tyggeligt. | Bundet med vinstokke. Meget tyggeligt. || Brun keramik med solidt håndtag. | Brun keramik med solidt håndtag. |+--------------------------------------------+----------- ------------------------------------+
Ellipsen bruger mindre plads. Dette skyldes, at det er et enkelt tegn i modsætning til de tre prikker (som er tre separate tegn).
Trunker ALLE rækker, uanset længde
Hvis du har brug for at afkorte alle rækker, uanset deres længde, behøver du ikke inkludere IF()
funktion.
I dette tilfælde kan koden forkortes til noget som dette:
SELECT CONCAT(LEFT(ProductDescription, 15), '...') AS "Short Desc", ProductDescription AS "Full Desc"FROM Products;
Resultat:
+--------------------+------------------------ ----------------+| Kort beskrivelse | Fuld beskrivelse |+--------------------+------------------------ ----------------+| Lilla. Medtag... | Lilla. Inkluderer venstrehåndskasse. || Blå. Omfatter ... | Blå. Inkluderer højrehåndskasse. || Cirka 45 ... | Cirka 45 minutters ventetid. || Cirka 30 ... | Cirka 30 minutters ventetid. || Træhåndtag. ... | Træhåndtag. Gratis vinglas. || Orange. Medtag... | Orange. Inkluderer ekstra fingre. || Bundet med vinstokke... | Bundet med vinstokke. Meget tyggeligt. || Brun keramik m... | Brun keramik med solidt håndtag. |+---------------------+-------------------------------- --------------+
Udlad Ellipsen
Og hvis du ikke engang har brug for ellipsen/tre perioder, så kan du endda forkorte den yderligere, til noget som dette:
SELECT LEFT(ProductDescription, 15) AS "Short Desc", ProductDescription AS "Full Desc"FROM Products;
Resultat:
+----------------+-------------------------------- --------------+| Kort beskrivelse | Fuld beskrivelse |+----------------+-------------------------------- --------------+| Lilla. Inkluder | Lilla. Inkluderer venstrehåndskasse. || Blå. Indeholder | Blå. Inkluderer højrehåndskasse. || Cirka 45 | Cirka 45 minutters ventetid. || Cirka 30 | Cirka 30 minutters ventetid. || Træhåndtag. | Træhåndtag. Gratis vinglas. || Orange. Inkluder | Orange. Inkluderer ekstra fingre. || Bundet med vinstokke | Bundet med vinstokke. Meget tyggeligt. || Brun keramik m | Brun keramik med solidt håndtag. |+-----------------+----------- -----------+