知乎專欄 | 多維度架構 |
LEFT(str,len)
mysql> select left(concat('1','0000000'),5) as number; +--------+ | number | +--------+ | 10000 | +--------+ 1 row in set (0.00 sec)
RIGHT(str,len)
mysql> select right(concat('0000000','1'),5) as number; +--------+ | number | +--------+ | 00001 | +--------+ 1 row in set (0.00 sec)
補齊長度用'0'填充
RPAD(str,len,padstr)mysql> select rpad('10',5,'0') as txt; +-------+ | txt | +-------+ | 10000 | +-------+ 1 row in set (0.01 sec)LPAD(str,len,padstr)
mysql> select lpad('10',5,'0') as txt; +-------+ | txt | +-------+ | 00010 | +-------+ 1 row in set (0.00 sec)
CONCAT(str1,str2,...)
mysql> select concat('Neo',' ','Chen') as Name; +----------+ | Name | +----------+ | Neo Chen | +----------+ 1 row in set (0.00 sec)
SELECT CONCAT_WS(',', 'Neo', 'Chen'); Neo,Chen SELECT CONCAT_WS('-', 'Neo', 'Chen'); Neo-Chen
使用逗號連結字元串
SELECT CONCAT_WS(',', id, name, age) FROM mytable
當我使用 select CONCAT_WS(",", *) as string from tab 時發現不支持 * 操作。
解決方案如下
SET @column = NULL; SELECT GROUP_CONCAT(COLUMN_NAME) AS fields INTO @column FROM INFORMATION_SCHEMA.Columns WHERE table_name = 'mytable' AND table_schema = 'test'; -- select @column; SET @sql = CONCAT('SELECT CONCAT_WS(",",',@column, ' ) FROM mytable'); select @sql; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
mysql> select GROUP_CONCAT(CONVERT( username , CHAR (16)) order by username desc) as username from test; +-------------------------------------------+ | username | +-------------------------------------------+ | jam,jam2,john,john2,john3,neo,neo1,neo2 | +-------------------------------------------+ 6 rows in set, 1 warning (0.01 sec)
select replace(goods_desc,':8000','') from ecs_goods; update ecs_goods set goods_desc=replace(goods_desc,':8000','');
mysql> SELECT SUBSTRING('netkiller',4,4); +----------------------------+ | SUBSTRING('netkiller',4,4) | +----------------------------+ | kill | +----------------------------+ 1 row in set (0.00 sec)
與left,right 相同的用法
select right('M2014030615410572307:DEPOSIT', 7); SELECT SUBSTRING('M2014030615410572307:DEPOSIT', -7);
SELECT SUBSTRING_INDEX('M2014030615410572307:DEPOSIT', ':', -1); SELECT SUBSTRING_INDEX('M2014030615410572307:DEPOSIT', ':', 1);
簡單用法
mysql> select AES_ENCRYPT('helloworld','key'); +---------------------------------+ | AES_ENCRYPT('helloworld','key') | +---------------------------------+ | | +---------------------------------+ 1 row in set (0.00 sec) mysql> select AES_DECRYPT(AES_ENCRYPT('helloworld','key'),'key'); +----------------------------------------------------+ | AES_DECRYPT(AES_ENCRYPT('helloworld','key'),'key') | +----------------------------------------------------+ | helloworld | +----------------------------------------------------+ 1 row in set (0.00 sec) mysql>
加密數據入庫
CREATE TABLE `encryption` ( `mobile` VARBINARY(16) NOT NULL, `key` VARCHAR(32) NOT NULL ) ENGINE=InnoDB; INSERT INTO encryption(`mobile`,`key`)VALUES( AES_ENCRYPT('13691851789',md5('13691851789')), md5('13691851789')) select AES_DECRYPT(mobile,`key`), length(mobile) from encryption;