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);
7.4.10. AES_ENCRYPT / AES_DECRYPT
简单用法
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;
原文出处:Netkiller 系列 手札
本文作者:陈景峯
转载请与作者联系,同时请务必标明文章原始出处和作者信息及本声明。