MySQL5.6中常用的函数用法介绍

本篇内容主要讲解“MySQL5.6中常用的函数用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MysqL5.6中常用的函数用法介绍”吧!

 常用的函数有:
1. 字符串函数;主要用于处理字符串。
2. 数值函数;主要用于处理数字。
3. 日期和时间函数;主要用于处理日期和事件。
4. 系统信息函数获取系统信息。


1. 使用字符串函数
1.1 合并字符串函数concat() 和 concat_ws():
concat(s1, s2,...sn)
//该函数会将传入的参数连接起来返回合并的字符串类型的数据。如果其中一个参数为null,则返回值为null.

例子:
MysqL> select concat('my','s','ql');
+-----------------------+
| concat('my','s','ql') |
+-----------------------+
| MysqL                 |
+-----------------------+
1 row in set (0.00 sec)

MysqL> select concat('my','s','ql',null);
+----------------------------+
| concat('my','s','ql',null) |:


+----------------------------+
| NULL                       |
+----------------------------+
1 row in set (0.00 sec)

MysqL> select concat(curdate(), 12.2);
+-------------------------+
| concat(curdate(), 12.2) |
+-------------------------+
| 2017-03-1712.2          |
+-------------------------+
1 row in set (0.00 sec)


concat_ws()的定义:
concat_ws(sep,s1,s2,...sn)
//该函数与concat()相比,多了一个表示分隔符的seq参数,不仅将传入的其他参数连接起来,而且还会通过分隔符将各个字符串分割开来。
//分隔符可以是一个字符串,也可以是其他参数。如果分割符为null,则返回结果为null。函数会忽略任何分割符后的参数null.

例子:
MysqL> select concat_ws('-','010','87658907');
+---------------------------------+
| concat_ws('-','010','87658907') |
+---------------------------------+
| 010-87658907                    |
+---------------------------------+
1 row in set (0.02 sec)


MysqL> select concat_ws(null,'010','87658907');
+----------------------------------+
| concat_ws(null,'010','87658907') |
+----------------------------------+
| NULL                             |
+----------------------------------+
1 row in set (0.00 sec)


MysqL> select concat_ws('-','010',null,'87658907');
+--------------------------------------+
| concat_ws('-','010',null,'87658907') |
+--------------------------------------+
| 010-87658907                         |
+--------------------------------------+
1 row in set (0.00 sec)


1.2 比较字符串大小函数strcmp():
strcmp()定义为:
strcmp(str1,str2);
//如果参数str1大于str2,返回1;如果str1小于str2,则返回-1;如果str1等于str2,则返回0;

例子:
MysqL> select strcmp('abc','abd'),strcmp('abc','abc'),strcmp('abc','abb');
+---------------------+---------------------+---------------------+
| strcmp('abc','abd') | strcmp('abc','abc') | strcmp('abc','abb') |
+---------------------+---------------------+---------------------+
|                  -1 |                   0 |                   1 |
+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)


1.3 获取字符串长度函数length()和字符数函数char_length():
length()的定义如下:
length(str)
char_length(str)的定义如下:
char_length(str)

例子:
MysqL> select length('MysqL'),length('中国'),char_length('MysqL'),char_length('中国');
+-----------------+------------------+----------------------+-----------------------+
| length('MysqL') | length('汉字')   | char_length('MysqL') | char_length('中国')   |
+-----------------+------------------+----------------------+-----------------------+
|               5 |                6 |                    5 |                     2 |
+-----------------+------------------+----------------------+-----------------------+
1 row in set (0.00 sec)

//字符串‘MysqL'共有5个字符,但是占6个字节空间。这是因为每个字符串都是以\0结束。两个函数都是获取字符串的字符数而不是所占空间大小。utf8(一个中文三个字节),所以两个汉字占6个字节。


1.4 字母的大小写转换upper()和lower():
字母大写转换函数:upper(s); ucase(s);
字母小写转换函数:lower(s); lcase(s);

例子:
MysqL> select upper('MysqL'),ucase('MysqL'),lower('MysqL'),lcase('MysqL');
+----------------+----------------+----------------+----------------+
| upper('MysqL') | ucase('MysqL') | lower('MysqL') | lcase('MysqL') |
+----------------+----------------+----------------+----------------+
| MysqL          | MysqL          | MysqL          | MysqL          |
+----------------+----------------+----------------+----------------+
1 row in set (0.00 sec)


1.5 查找字符串:
MysqL中提供了丰富的函数去查找字符串的位置。分别有find_in_set()函数、field()函数、locate()函数、position()函数和instr()函数。同时还提供了查找指定位置的字符串的函数elt()。

1.5.1 返回字符串位置的find_in_set()函数
函数定义为:
find_in_set(str1,str2) 
//会返回在字符串str2中与str1相匹配的字符串的位置,参数str2字符串中将包含若干个用逗号隔开的字符串。

例子:
MysqL> select find_in_set('MysqL','oracle,db2,MysqL');
+-----------------------------------------+
| find_in_set('MysqL','oracle,db2,MysqL') |
+-----------------------------------------+
|                                       3 |
+-----------------------------------------+
1 row in set (0.00 sec)


1.5.2 返回指定字符串位置的field()函数
函数定义为:
filed(str,str1,str2...)
//返回第一个与字符串str匹配的字符串的位置。

例子:
MysqL>  select field('MysqL','oracle','db2','redis','MysqL');
+-----------------------------------------------+
| field('MysqL','oracle','db2','redis','MysqL') |
+-----------------------------------------------+
|                                             4 |
+-----------------------------------------------+
1 row in set (0.00 sec)


1.5.3 返回子字符串相匹配的开始位置:
MysqL中有三个函数可以获取子字符串相匹配的开始位置,分别是locate()、position()、instr()函数
locate(str1,str) //返回参数str中字符串str1的开始位置
position(str1 in str) 和 instr(str,str1)

例子:
MysqL> select locate('sql','MysqL'),position('sql' in 'MysqL'),instr('MysqL','sql');
+-----------------------+----------------------------+----------------------+
| locate('sql','MysqL') | position('sql' in 'MysqL') | instr('MysqL','sql') |
+-----------------------+----------------------------+----------------------+
|                     3 |                          3 |                    3 |
+-----------------------+----------------------------+----------------------+
1 row in set (0.00 sec)


1.5.4 返回指定位置的字符串的elt()函数
函数语法为:
elt(n,str1,str2...);

例子:
MysqL> select elt(2,'db2','MysqL','oracle');
+-------------------------------+
| elt(2,'db2','MysqL','oracle') |
+-------------------------------+
| MysqL                         |
+-------------------------------+
1 row in set (0.00 sec)


1.5.5 选择字符串的make_set()函数
函数定义为:
make_set(num,str1,str2...strn)

例子:
MysqL> select bin(5),make_set(5,'MysqL','db2','oracle','redus');
+--------+--------------------------------------------+
| bin(5) | make_set(5,'MysqL','db2','oracle','redus') |
+--------+--------------------------------------------+
| 101    | MysqL,oracle                               |
+--------+--------------------------------------------+
1 row in set (0.00 sec)

//make_set()首先会将数值num转换成二进制数,然后按照二进制从参数str1,str2,...,strn中选取相应的字符串。再通过二进制从右到左的顺序读取该值,如果值为1选择该字符串,否则将不选择该字符串。


1.6 从现有字符串中截取子字符串:

截取子字符串的函数有:left(),right(),substring(),mid();

1.6.1 从左边或右边截取子字符串:
函数定义为:
left(str,num)
//返回字符串str中包含前num个字母(从左边数)的字符串。
right(str,num)
//返回字符串str中包含后num个字母(从右边数)的字符串。

例子:
MysqL> select left('MysqL',2),right('MysqL',3);
+-----------------+------------------+
| left('MysqL',2) | right('MysqL',3) |
+-----------------+------------------+
| my              | sql              |
+-----------------+------------------+
1 row in set (0.01 sec)


1.6.2 截取指定位置和长度的字符串:
可以通过substring()和mid()函数截取指定位置和长度的字符串。
函数语法为:
substring(str,num,len) //返回字符串str中的第num个位置开始长度为len的子字符串。
mid(str,num,len)

例子:
MysqL> select substring('duansf',1,4),mid('duansf',5,6);
+-------------------------+-------------------+
| substring('duansf',1,4) | mid('duansf',5,6) |
+-------------------------+-------------------+
| duan                    | sf                |
+-------------------------+-------------------+
1 row in set (0.00 sec)


1.7 去除字符串的首尾空格:
去除字符串首尾空格的函数有:ltrim()、rtrim()、trim()

1.7.1 去除字符串开始处的空格:
函数定义如下:
ltrim(str) //返回去掉开始处空格的字符串

例子:
MysqL> select length(concat('-',' MysqL ','-')),length(concat('-',ltrim(' MysqL '),'-'));
+-----------------------------------+------------------------------------------+
| length(concat('-',' MysqL ','-')) | length(concat('-',ltrim(' MysqL '),'-')) |
+-----------------------------------+------------------------------------------+
|                                 9 |                                        8 |
+-----------------------------------+------------------------------------------+
1 row in set (0.00 sec)


1.7.2 去除字符串结束处的空格:
rtrim(str) //返回去掉结束处空格的字符串。

例子:
MysqL>  select length(concat('-',' MysqL ','-')) ,length(concat('-',rtrim(' MysqL '),'-'));
+-----------------------------------+------------------------------------------+
| length(concat('-',' MysqL ','-')) | length(concat('-',rtrim(' MysqL '),'-')) |
+-----------------------------------+------------------------------------------+
|                                 9 |                                        8 |
+-----------------------------------+------------------------------------------+
1 row in set (0.00 sec)


1.7.3 去除字符串首尾空格:
trim(str) //返回去掉首尾空格的字符串

例子:
MysqL> select concat(' MysqL ') origi,length(concat(' MysqL ')) orilen, concat(trim(' MysqL ')) after, length(concat(trim(' MysqL '))) afterlen;
+---------+--------+-------+----------+
| origi   | orilen | after | afterlen |
+---------+--------+-------+----------+
|  MysqL  |      7 | MysqL |        5 |
+---------+--------+-------+----------+
1 row in set (0.00 sec)


1.8 替换字符串:

实现替换字符串的功能,分别为insert()和replace()

1.8.1 使用insert()函数

函数定义为:
insert(str,pos,len,newstr)
//insert()函数会将字符串str中的pos位置开始长度为len的字符串用字符串newstr来替换。
//如果参数pos的值超过字符串长度,则返回值为原始字符串str。
//如果len的长度大于原来str中所剩字符串的长度,则从位置pos开始进行全部替换。若任何一个参数为null,则返回值为null.

例子:
MysqL> select insert('这是MysqL数据库系统',3,5,'oracle') bieming;
+-----------------------------+
| bieming                     |
+-----------------------------+
| 这是oracle数据库系统        |
+-----------------------------+
1 row in set (0.00 sec)


1.8.1 使用replace()函数
函数的定义为:
replace(str,substr,newstr) //将字符串str中的子字符串substr用字符串newstr来替换。

例子:
MysqL> select replace('这是db2数据库','db2','MysqL') bieming;
+----------------------+
| bieming              |
+----------------------+
| 这是MysqL数据库      |
+----------------------+
1 row in set (0.00 sec)


2. 使用数值函数


2.1 获取随机数:
通过rand()和rand(x)函数获取随机数。这两个函数都会返回0-1之间的随机数,其中rand()函数返回的数是完全随机的,而rand(x)函数返回的随机数值是完全相同的。

例子:
MysqL> select rand(),rand(),rand(2),rand(2);
+--------------------+--------------------+--------------------+--------------------+
| rand()             | rand()             | rand(2)            | rand(2)            |
+--------------------+--------------------+--------------------+--------------------+
| 0.6218820266629402 | 0.4098255535679176 | 0.6555866465490187 | 0.6555866465490187 |
+--------------------+--------------------+--------------------+--------------------+
1 row in set (0.00 sec)


2.2 获取整数的函数

在具体应用中,如果想要获取整数,可以通过ceil()和floor()函数来实现。
ceil()函数的定义为:
ceil(x) //函数返回大于或等于数值x的最小整数。
floor() //函数返回小于或等于数值x的最大整数。

例子:
MysqL> select ceil(4.3),ceil(-2.4),floor(4.3),floor(-2.4);
+-----------+------------+------------+-------------+
| ceil(4.3) | ceil(-2.4) | floor(4.3) | floor(-2.4) |
+-----------+------------+------------+-------------+
|         5 |         -2 |          4 |          -3 |
+-----------+------------+------------+-------------+
1 row in set (0.00 sec)


2.3 截取数值函数

可以通过truncate()对数值的小数位进行截取
函数定义为:
truncate(x,y) //返回数值x,保留小数点后y位

例子:
MysqL> select truncate(903.342434,2),truncate(903.342,-1);
+------------------------+----------------------+
| truncate(903.342434,2) | truncate(903.342,-1) |
+------------------------+----------------------+
|                 903.34 |                  900 |
+------------------------+----------------------+
1 row in set (0.00 sec)


2.4 四舍五入函数

对数值进行四舍五入可以通过round()函数实现:
round(x) 
//函数返回值x经过四舍五入操作后的数值。

round(x,y)
//返回数值x保留到小数点后y位的值。在具体截取数据时需要进行四舍五入的操作。

例子:
MysqL> select round(902.53567),round(-902.53567),round(902.53567,2),round(902.53567,-1);
+------------------+-------------------+--------------------+---------------------+
| round(902.53567) | round(-902.53567) | round(902.53567,2) | round(902.53567,-1) |
+------------------+-------------------+--------------------+---------------------+
|              903 |              -903 |             902.54 |                 900 |
+------------------+-------------------+--------------------+---------------------+
1 row in set (0.02 sec)


3. 使用日期和时间函数:

3.1 获取当前日期和时间的函数

3.1.1 获取当前日期和时间(日期 + 时间):
MysqL中可以通过四个函数获取当前日期和时间,分别是Now(),current_timestamp(),localtime(),sysdate(),这四个函数不仅可以获取当前日期和时间,而且显示的格式也一样。推荐使用Now()

例子:
MysqL> select Now(),current_timestamp(),localtime(),sysdate();
+---------------------+---------------------+---------------------+---------------------+
| Now()               | current_timestamp() | localtime()         | sysdate()           |
+---------------------+---------------------+---------------------+---------------------+
| 2017-03-17 15:52:24 | 2017-03-17 15:52:24 | 2017-03-17 15:52:24 | 2017-03-17 15:52:24 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)


3.1.2 获取当前日期:

获取当前日期的函数curdate()和current_date()函数

例子:
MysqL>  select curdate(),current_date();
+------------+----------------+
| curdate()  | current_date() |
+------------+----------------+
| 2017-03-17 | 2017-03-17     |
+------------+----------------+
1 row in set (0.00 sec)




3.1.3 获取当前时间:
获取当前时间的函数,curtime()或者current_time();推荐使用curtime();

例子:
MysqL> select curtime(),current_time();
+-----------+----------------+
| curtime() | current_time() |
+-----------+----------------+
| 15:53:32  | 15:53:32       |
+-----------+----------------+
1 row in set (0.00 sec)


3.2 获取日期和时间各部分值:

MysqL中,可以通过各种函数获取当前日期和时间的各部分值,其中year()函数返回日期中的年份,quarter()函数返回日期属于第几个季度,month()函数返回日期属于第几个月,week()函数返回日期属于第几个星期,dayofmonth()函数返回日期属于当前月的第几天,hour()函数返回时间的小时,minute()函数返回时间的分钟,second()函数返回时间的秒。

例子:
MysqL> select Now(),year(Now()),quarter(Now()),month(Now()),week(Now()),dayofmonth(Now()),hour(Now()),minute(Now()),second(Now());
+---------------------+-------------+----------------+--------------+-------------+-------------------+-------------+---------------+---------------+
| Now()               | year(Now()) | quarter(Now()) | month(Now()) | week(Now()) | dayofmonth(Now()) | hour(Now()) | minute(Now()) | second(Now()) |
+---------------------+-------------+----------------+--------------+-------------+-------------------+-------------+---------------+---------------+
| 2017-03-17 15:54:07 |        2017 |              1 |            3 |          11 |                17 |          15 |            54 |             7 |
+---------------------+-------------+----------------+--------------+-------------+-------------------+-------------+---------------+---------------+
1 row in set (0.00 sec)


3.2.1 关于月的函数

例子:
MysqL> select Now(),month(Now()),monthname(Now());
+---------------------+--------------+------------------+
| Now()               | month(Now()) | monthname(Now()) |
+---------------------+--------------+------------------+
| 2017-03-17 15:54:43 |            3 | march            |
+---------------------+--------------+------------------+
1 row in set (0.03 sec)


3.2.2 关于星期的函数

例子:
MysqL>  select Now(),week(Now()),weekofyear(Now()),dayname(Now()),dayofweek(Now()),weekday(Now());
+---------------------+-------------+-------------------+----------------+------------------+----------------+
| Now()               | week(Now()) | weekofyear(Now()) | dayname(Now()) | dayofweek(Now()) | weekday(Now()) |
+---------------------+-------------+-------------------+----------------+------------------+----------------+
| 2017-03-17 15:55:32 |          11 |                11 | Friday         |                6 |              4 |
+---------------------+-------------+-------------------+----------------+------------------+----------------+
1 row in set (0.00 sec)


3.2.3 关于天的函数

例子:
MysqL> select Now(),dayofyear(Now()),dayofmonth(Now());
+---------------------+------------------+-------------------+
| Now()               | dayofyear(Now()) | dayofmonth(Now()) |
+---------------------+------------------+-------------------+
| 2017-03-17 15:56:12 |               76 |                17 |
+---------------------+------------------+-------------------+
1 row in set (0.00 sec)


3.2.4 获取指定值的extract():
函数定义为:
extract(type from date)
//上述函数会从日期和时间参数date中获取指定类型参数type的值。type的取值可以是:year,month,day,hour,minute和second

例子:
MysqL> select Now(),extract(year from Now()) year,extract(month from Now()) month,extract(day from Now()) day,extract(hour from Now()) hour,extract(minute from Now()) minute,extract(second from Now()) second;
+---------------------+------+-------+------+------+--------+--------+
| Now()               | year | month | day  | hour | minute | second |
+---------------------+------+-------+------+------+--------+--------+
| 2017-03-17 15:57:26 | 2017 |     3 |   17 |   15 |     57 |     26 |
+---------------------+------+-------+------+------+--------+--------+
1 row in set (0.00 sec)


3.3 计算日期和时间的函数

3.3.1 与认日期和时间操作:
两个函数来实现与认日期和时间的操作,分别为to_days()和from_days()
to_days(date):该函数计算日期参数date与认日期和时间(0000年1月1日)之间的想个天数。
from_days(number):该函数计算从认日期和时间(0000年1月1日)开始经历number天后的日期和时间。

例子:
MysqL> select Now(),to_days(Now()),from_days(to_days(Now()));
+---------------------+----------------+---------------------------+
| Now()               | to_days(Now()) | from_days(to_days(Now())) |
+---------------------+----------------+---------------------------+
| 2017-03-17 15:58:44 |         736770 | 2017-03-17                |
+---------------------+----------------+---------------------------+
1 row in set (0.00 sec)


3.3.2 与指定日期和时间操作:
adddate(date,n)函数:该函数计算日期参数date加上n天后的日期。
subdate(date,n)函数:该函数计算日期参数date减去n天后的日期。
adddate(d,interval expr type):返回日期参数d加上一段时间后的日期,表达式参数expr决定了时间的长度,参数type决定了所操作的对象。
subdate(d,interval expr type):返回日期参数d减去一段时间后的日期,表达式expr决定了时间的长度。参数type决定了所操作的对象。
addtime(time,n):计算时间参数time加上n秒后的时间。
subtime(time,n):计算时间参数time减去n秒后的时间。

例子一:
MysqL> select curdate(),adddate(curdate(),5),subdate(curdate(),5);
+------------+----------------------+----------------------+
| curdate()  | adddate(curdate(),5) | subdate(curdate(),5) |
+------------+----------------------+----------------------+
| 2017-03-17 | 2017-03-22           | 2017-03-12           |
+------------+----------------------+----------------------+
1 row in set (0.00 sec)

例子二:
MysqL> select curdate(),adddate(curdate(),interval '2,3' year_month),subdate(curdate(),interval '2,3' year_month);
+------------+----------------------------------------------+----------------------------------------------+
| curdate()  | adddate(curdate(),interval '2,3' year_month) | subdate(curdate(),interval '2,3' year_month) |
+------------+----------------------------------------------+----------------------------------------------+
| 2017-03-17 | 2019-06-17                                   | 2014-12-17                                   |
+------------+----------------------------------------------+----------------------------------------------+
1 row in set (0.00 sec)

例子三:
MysqL> select curtime(),addtime(curtime(),5),subtime(curtime(),5);
+-----------+----------------------+----------------------+
| curtime() | addtime(curtime(),5) | subtime(curtime(),5) |
+-----------+----------------------+----------------------+
| 16:03:49  | 16:03:54             | 16:03:44             |
+-----------+----------------------+----------------------+
1 row in set (0.03 sec)


4. 使用系统信息函数
select version(),database(),user();

例子:
MysqL> select version(),database(),user();
+------------+------------+----------------+
| version()  | database() | user()         |
+------------+------------+----------------+
| 5.6.27-log | MysqL      | mdba@localhost |
+------------+------------+----------------+
1 row in set (0.00 sec)

到此,相信大家对“MysqL5.6中常用的函数用法介绍”有了更深的了解,不妨来实际操作一番吧!这里是编程之家网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关文章

这篇文章主要介绍“hive和mysql的区别是什么”,在日常操作中...
这篇“MySQL数据库如何改名”文章的知识点大部分人都不太理解...
这篇文章主要介绍“mysql版本查询命令是什么”的相关知识,小...
本篇内容介绍了“mysql怎么修改字段的内容”的有关知识,在实...
这篇文章主要讲解了“mysql怎么删除unique约束”,文中的讲解...
今天小编给大家分享一下mysql怎么查询不为空的字段的相关知识...