1、字符串函数
- concat(s1,s2,…sn)
将传入的参数连成字符串,如果与null相连,则值也为null
mysql> select concat('aaa','bbb','ccc'),concat('aaa',null);
+---------------------------+--------------------+
| concat('aaa','bbb','ccc') | concat('aaa',null) |
+---------------------------+--------------------+
| aaabbbccc | NULL |
+---------------------------+--------------------+
1 row in set (0.00 sec)
- insert(str,x,y,instr)
将字符串str从第x位开始,y个字符长的子串替换为instr
mysql> select insert('hello world',2,4,'ll');
+--------------------------------+
| insert('hello world',2,4,'ll') |
+--------------------------------+
| hll world |
+--------------------------------+
1 row in set (0.00 sec)
- lower(str),upper(str)
将字符串str转为小写、大写
mysql> select lower('HELLO'),upper('hello');
+----------------+----------------+
| lower('HELLO') | upper('hello') |
+----------------+----------------+
| hello | HELLO |
+----------------+----------------+
1 row in set (0.00 sec)
- left(str,x),right(str,x)
返回字符串str最左边、最右边x个字符
mysql> select left('hello',2),right('hello',2);
+-----------------+------------------+
| left('hello',2) | right('hello',2) |
+-----------------+------------------+
| he | lo |
+-----------------+------------------+
1 row in set (0.00 sec)
- substring(str,x,y)
返回从字符串str中的第x位开始,y字符长度的子串
mysql> select substring('hello world',5,3);
+------------------------------+
| substring('hello world',5,3) |
+------------------------------+
| o w |
+------------------------------+
1 row in set (0.00 sec)
- lpad(str,n,pad),rpad(str,n,pad)
用字符串pad对str最左边、最右边进行填充,直到长度达到n位为止
mysql> select lpad('hello',18,'world'),rpad('hello',18,'world');
+--------------------------+--------------------------+
| lpad('hello',18,'world') | rpad('hello',18,'world') |
+--------------------------+--------------------------+
| worldworldworhello | helloworldworldwor |
+--------------------------+--------------------------+
1 row in set (0.00 sec)
- ltrim(str),rtrim(str),trim(str)
去除字符串左侧、右侧对空白字符
mysql> select concat('+',' hello'),concat('+',ltrim(' hello')),concat('hello ','+'),concat(rtrim('hello '),'+');
+-------------------------+--------------------------------+-------------------------+--------------------------------+
| concat('+',' hello') | concat('+',ltrim(' hello')) | concat('hello ','+') | concat(rtrim('hello '),'+') |
+-------------------------+--------------------------------+-------------------------+--------------------------------+
| + hello | +hello | hello + | hello+ |
+-------------------------+--------------------------------+-------------------------+--------------------------------+
1 row in set (0.00 sec)
- repeat(str,x)
将字符串str重复x次
mysql> select repeat('hello ',3);
+--------------------+
| repeat('hello ',3) |
+--------------------+
| hello hello hello |
+--------------------+
1 row in set (0.00 sec)
- replace(str,a,b)
用字符串b替换str中出现的所有字符串a
mysql> select replace('hello world world world','world','hello');
+----------------------------------------------------+
| replace('hello world world world','world','hello') |
+----------------------------------------------------+
| hello hello hello hello |
+----------------------------------------------------+
1 row in set (0.00 sec)
2、数值函数
- abs(x):取绝对值
- ceil(x):向上取整
- floor(x):向下取整
- mod(x,y):取余,相当于x%y
- rand():取0-1内的随机数,不包括0,1
- round(x,y):四舍五入,y表示小数点后的位数,如果不写y,默认为0
- truncate(x,y):截断,y表示小数点后的位数
3、日期函数
- curdate():返回当前日期
- curtime():返回当前时间
- now():返回当前日期和时间
mysql> select curdate(),curtime(),now();
+------------+-----------+---------------------+
| curdate() | curtime() | now() |
+------------+-----------+---------------------+
| 2018-09-05 | 19:45:00 | 2018-09-05 19:45:00 |
+------------+-----------+---------------------+
1 row in set (0.00 sec)
- unix_timestamp(date):将日期转为时间戳
- from_unixtime():将时间戳转为日期
mysql> select unix_timestamp('2018-09-05 19:46:28'),from_unixtime(1536147988);
+---------------------------------------+---------------------------+
| unix_timestamp('2018-09-05 19:46:28') | from_unixtime(1536147988) |
+---------------------------------------+---------------------------+
| 1536147988 | 2018-09-05 19:46:28 |
+---------------------------------------+---------------------------+
1 row in set (0.01 sec)
- year():获取年份
- month():获取月份
- day():获取日期
- hour():获取小时
- minute():获取分钟
- second():获取秒数
mysql> select year(now()),month(now()),day(now()),hour(now()),minute(now()),second(now());
+-------------+--------------+------------+-------------+---------------+---------------+
| year(now()) | month(now()) | day(now()) | hour(now()) | minute(now()) | second(now()) |
+-------------+--------------+------------+-------------+---------------+---------------+
| 2018 | 9 | 5 | 19 | 51 | 31 |
+-------------+--------------+------------+-------------+---------------+---------------+
1 row in set (0.00 sec)
- date_format(date,format)
按照字符串format格式格式化日期date,就是按照指定的格式显示日期
日期格式如下:
格式 | 描述 |
---|---|
%a | 缩写星期名 |
%b | 缩写月名 |
%c | 月,数值 |
%D | 带有英文前缀的月中的天 |
%d | 月的天,数值(00-31) |
%e | 月的天,数值(0-31) |
%f | 微秒 |
%H | 小时 (00-23) |
%h | 小时 (01-12) |
%I | 小时 (01-12) |
%i | 分钟,数值(00-59) |
%j | 年的天 (001-366) |
%k | 小时 (0-23) |
%l | 小时 (1-12) |
%M | 月名 |
%m | 月,数值(00-12) |
%p | AM 或 PM |
%r | 时间,12-小时(hh:mm:ss AM 或 PM) |
%S | 秒(00-59) |
%s | 秒(00-59) |
%T | 时间, 24-小时 (hh:mm:ss) |
%U | 周 (00-53) 星期日是一周的第一天 |
%u | 周 (00-53) 星期一是一周的第一天 |
%V | 周 (01-53) 星期日是一周的第一天,与 %X 使用 |
%v | 周 (01-53) 星期一是一周的第一天,与 %x 使用 |
%W | 星期名 |
%w | 周的天 (0=星期日, 6=星期六) |
%X | 年,其中的星期日是周的第一天,4 位,与 %V 使用 |
%x | 年,其中的星期一是周的第一天,4 位,与 %v 使用 |
%Y | 年,4 位 |
%y | 年,2 位 |
示例
mysql> select date_format(now(),'%Y-%m-%d'),date_format(now(),'%H:%i:%s');
+-------------------------------+-------------------------------+
| date_format(now(),'%Y-%m-%d') | date_format(now(),'%H:%i:%s') |
+-------------------------------+-------------------------------+
| 2018-09-06 | 09:59:47 |
+-------------------------------+-------------------------------+
1 row in set (0.00 sec)
4、流程函数
- if(val,t,f)
如果value为真,返回t,如果为假,返回f
mysql> select * from users;
+----+-------+-----+
| id | name | age |
+----+-------+-----+
| 1 | john | 21 |
| 2 | May | 35 |
| 3 | Lucy | 18 |
| 4 | Jack | 40 |
| 5 | James | 8 |
+----+-------+-----+
5 rows in set (0.00 sec)
mysql> select *,if(age>18,'成年','未成年') as status from users;
+----+-------+-----+-----------+
| id | name | age | status |
+----+-------+-----+-----------+
| 1 | john | 21 | 成年 |
| 2 | May | 35 | 成年 |
| 3 | Lucy | 18 | 未成年 |
| 4 | Jack | 40 | 成年 |
| 5 | James | 8 | 未成年 |
+----+-------+-----+-----------+
5 rows in set (0.00 sec)
- ifnull(value1,value2)
如果value1不为null,返回value1,如果为null,返回value2
mysql> select * from users;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | john | 21 |
| 2 | May | NULL |
| 3 | Lucy | NULL |
| 4 | Jack | 40 |
| 5 | James | NULL |
+----+-------+------+
5 rows in set (0.00 sec)
mysql> select *,ifnull(age,0) as age from users;
+----+-------+------+-----+
| id | name | age | age |
+----+-------+------+-----+
| 1 | john | 21 | 21 |
| 2 | May | NULL | 0 |
| 3 | Lucy | NULL | 0 |
| 4 | Jack | 40 | 40 |
| 5 | James | NULL | 0 |
+----+-------+------+-----+
5 rows in set (0.00 sec)
- case when [expr] then [result] … else [default] end
- case [value] when [value] then … else [default] end
多条件判断,两者区别,第一种
mysql> select *,
-> case when age<20 then '孩童'
-> when age between 20 and 30 then '弱冠'
-> when age between 30 and 40 then '而立'
-> when age between 40 and 50 then '不惑'
-> else '花甲' end as status from users;
+----+-------+------+--------+
| id | name | age | status |
+----+-------+------+--------+
| 1 | john | 21 | 弱冠 |
| 2 | May | 35 | 而立 |
| 3 | Lucy | 18 | 孩童 |
| 4 | Jack | 40 | 而立 |
| 5 | James | 8 | 孩童 |
+----+-------+------+--------+
5 rows in set (0.01 sec)
mysql> select *,
-> case age
-> when 18 then '刚好成年'
-> when 21 then '成年3年了'
-> else '其他情况' end as status from users;
+----+-------+------+---------------+
| id | name | age | status |
+----+-------+------+---------------+
| 1 | john | 21 | 成年3年了 |
| 2 | May | 35 | 其他情况 |
| 3 | Lucy | 18 | 刚好成年 |
| 4 | Jack | 40 | 其他情况 |
| 5 | James | 8 | 其他情况 |
+----+-------+------+---------------+
5 rows in set (0.00 sec)
两者区别,第一种的条件判断可以使用各种条件,第二种只能匹配具体的值,所以很明显第一种适用范围更广
5、其他函数
- database():显示当前数据库名
- version():显示当前数据库版本
- user():显示当前登陆用户名
mysql> select database(),version(),user();
+------------+-----------+----------------+
| database() | version() | user() |
+------------+-----------+----------------+
| test | 8.0.12 | root@localhost |
+------------+-----------+----------------+
1 row in set (0.01 sec)
- password():加密
- md5():md5加密
password()用来对mysql用户密码进行加密,是不可逆的
md5()用来对数据进行加密,也是不可逆的