Mega Code Archive

 
Categories / MySQL / Procedure Function
 

Function to shorten a string

mysql> mysql> delimiter $$ mysql> mysql> mysql> CREATE FUNCTION shorten(s VARCHAR(255), n INT)     ->  RETURNS VARCHAR(255)     ->  BEGIN     ->     IF ISNULL(s) THEN     ->        RETURN '';     ->     ELSEIF n<15 THEN     ->        RETURN LEFT(s, n);     ->     ELSE IF CHAR_LENGTH(s) <= n THEN     ->            RETURN s;     ->         ELSE     ->            RETURN CONCAT(LEFT(s, n-10), ' ... ', RIGHT(s, 5));     ->         END IF;     ->     END IF;     ->  END$$ Query OK, 0 rows affected (0.00 sec) mysql> mysql> SELECT shorten("abcdefghijklmnopqrstuvwxyz", 15)$$ +-------------------------------------------+ | shorten("abcdefghijklmnopqrstuvwxyz", 15) | +-------------------------------------------+ | abcde ... vwxyz                           | +-------------------------------------------+ 1 row in set (0.00 sec) mysql> mysql> delimiter ; mysql> mysql> CREATE TABLE titles (     ->   titleID int(11),     ->   title varchar(100),     ->   subtitle varchar(100),     ->   edition tinyint(4),     ->   publID int(11),     ->   catID int(11),     ->   langID int(11),     ->   year int(11),     ->   isbn varchar(20),     ->   comment varchar(255),     ->   ts timestamp,     ->   authors varchar(255),     ->   PRIMARY KEY  (titleID)     -> ); Query OK, 0 rows affected (0.00 sec) mysql> mysql> mysql> mysql> INSERT INTO titles VALUES (1,'Linux','Installation',5,1,57,2,2000,NULL,NULL,'2005-02-28 13:34:21','Michael'),     ->                           (2,'Excel',NULL,NULL,2,3,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','David'),     ->                           (3,'XML',NULL,NULL,1,2,NULL,1997,NULL,NULL,'2005-02-28 13:34:22','Edwards'),     ->                           (4,'PHP',NULL,NULL,3,6,NULL,2000,NULL,NULL,'2005-02-28 13:34:22','Tom'),     ->                           (5,'MySQL','',0,3,34,NULL,2000,'','','2005-02-28 13:34:22','Paul'),     ->                           (6,'Java',NULL,NULL,4,34,NULL,1999,NULL,NULL,'2005-02-28 13:34:22','Tim'); Query OK, 6 rows affected (0.00 sec) Records: 6  Duplicates: 0  Warnings: 0 mysql> mysql> mysql> mysql> mysql> SELECT title, shorten(title, 2) FROM titles LIMIT 10; +-------+-------------------+ | title | shorten(title, 2) | +-------+-------------------+ | Linux | Li                | | Excel | Ex                | | XML   | XM                | | PHP   | PH                | | MySQL | My                | | Java  | Ja                | +-------+-------------------+ 6 rows in set (0.00 sec) mysql> mysql> mysql> drop table titles; Query OK, 0 rows affected (0.00 sec) mysql> drop function shorten; Query OK, 0 rows affected (0.00 sec) mysql>