mysql数据库中的函数

    函数表示对输入参数值返回一个具有特定关系的值,在mysql中使用函数可以极大的提高用户对数据库的管理效率。Mysql中的函数主要有数学函数,字符串函数,日期函数,时间函数以及条件判断函数、系统信息函数和加密函数等。

1、流程控制函数

         流程控制函数主要用于根据满足条件的不同,执行相应的流程,mysql中流程控制函数主要有IF()、IFNULL()、CASH、以及NULLIF()。

(1)IF(expr,v1,v2)函数

         IF(expr,v1,v2)函数中如果expr是TRUE,则返回v1,否则返回v2。IF()返回的值可以是数字或字符串。

# 使用if判断语句
mysql> select if(2>1,1,2),if(strcmp('test','test123'),'false',true);
+-------------+-------------------------------------------+
| if(2>1,1,2) | if(strcmp('test','test123'),'false',true) |
+-------------+-------------------------------------------+
|           1 | false                                     |
+-------------+-------------------------------------------+

(2)IFNULL(v1,v2)函数

         IFNULL(v1,v2)函数中,如果v1不为null,则IFNULL的返回值为v1,否则为v2。

# IFNULL()函数的应用
mysql> SELECT IFNULL(0,1),IFNULL(NULL,2),IFNULL(1/0,'wrong');

+-------------+----------------+---------------------+
| IFNULL(0,1) | IFNULL(NULL,2) | IFNULL(1/0,'wrong') |
+-------------+----------------+---------------------+
|           0 |              2 | wrong               |
+-------------+----------------+---------------------+
# 查看teacher表中的name值,如果为空则使用”null”
mysql> select name,ifnull(name,'other') from teacher;
+-------+----------------------+
| name  | ifnull(name,'other') |
+-------+----------------------+
| NULL  | other                |
| carey | carey                |
+-------+----------------------+

(3)CASE函数

         语法格式为:CASE expr WHEN v1 THEN r1 [when v2 THEN r2] [ELSE m] END

                                     CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

         如果expr值等于vn,则返回对应vn位置后面的结果rn,如果都不匹配,则返回ELSE后面的m。

# 查询teacher表中信息,并将查询语句使用别名
mysql> select case dept_id when 2 then 'english' when 3 then 'maths' else 'other' end course_name,dept_id from teacher;
+-------------+---------+
| course_name | dept_id |
+-------------+---------+
| english     |       2 |
| maths       |       3 |
+-------------+---------+
# 将上面的语句写成条件判断语句
mysql> select case when dept_id=2 then 'english' when dept_id=3 then 'maths' else 'other' end course_name,ifnull(name,'other_teacher'),dept_id from teacher;
+-------------+------------------------------+---------+
| course_name | ifnull(name,'other_teacher') | dept_id |
+-------------+------------------------------+---------+
| maths       | other_teacher                |       3 |
| english     | carey                         |       2 |
+-------------+------------------------------+---------+

(4)NULLIF(expr1,expr2)

         当expr1等于expr2时,则返回null,否则返回expr1

# nullif函数应用
mysql> select nullif(1,1),nullif(1,2);
+-------------+-------------+
| nullif(1,1) | nullif(1,2) |
+-------------+-------------+
|        NULL |           1 |
+-------------+-------------+

2、字符串函数

(1)ASCII(str)

         返回str字符串中最左边字符的ascii码值,如果是空串则返回0,如果str是null则返回null。

# 返回字符串对应的ASCII码
mysql> SELECT ASCII('6'),ASCII('AB'),ASCII(''),ASCII(' ');
+------------+-------------+-----------+------------+
| ASCII('6') | ASCII('AB') | ASCII('') | ASCII(' ') |
+------------+-------------+-----------+------------+
|         54  |          65  |         0  |         32  |
+------------+-------------+-----------+------------+

(2)CHAR(N,... [USING charset_name])

         将括号中的N转化成ascii码对应的字符,返回这些字符组成的字符串,其中的null会被忽略。

# 将ascii码转化成字符
mysql> select char(77,121,83,81,'76'),char(77,'77.77');
+-------------------------+------------------+
| char(77,121,83,81,'76') | char(77,'77.77') |
+-------------------------+------------------+
| MySQL                   | MM               |
+-------------------------+------------------+

(3)CHAR_LENGTH(str)

         返回字符串的长度

# 返回字符串长度
mysql> select char_length('mysql');
+----------------------+
| char_length('mysql') |
+----------------------+
|                    5    |
+----------------------+

(4)CONCAT(str1,str2,...)

         将括号里所有参数连接在一起,当有’null’时返回’null’

mysql> select concat('hell','o',',','my','sql'),concat(null,'test');  
+-----------------------------------+---------------------+
| concat('hell','o',',','my','sql') | concat(null,'test') |
+-----------------------------------+---------------------+
| hello,mysql                       | NULL                |
+-----------------------------------+---------------------+

(5)CONCAT_WS(separator,str1,str2,...)

         返回以第一个参数为分隔符的连接后的一个字符串,当有参数为NULL时则null被忽略。

(6)INSERT(str,pos,len,newstr)

         将str中从pos位置开始后的len个字符替换成newstr字符串。

mysql> select insert('aaabbb',3,3,'zzz');
+----------------------------+
| insert('aaabbb',3,3,'zzz') |
+----------------------------+
| aazzzb                     |
+----------------------------+

(7)INSTR(str,substr)

         返回str字符串中第一个出现substr字符串的位置

(8)LEFT(str,len)

         返回str字符串中从左边开始的len个长度的字符

(9)LENGTH(str)

         返回str字符串的byte字节长度

(10)LOAD_FILE(file_name)

         读取文件且返回文件内容为字符串

(11)LOCATE(substr,str)

         返回str字符串中第一次出现substr字符串的位置,如果没有则返回null

(12)LOCATE(substr,str,pos)

         返回str字符串中从pos位置开始第一次出现substr字符串的位置,如果没有则返回null

(13)LOWER(str)

         返回将str字符串中所有字符变换成小写后的字符串,但对二进制文本无效

(14)LPAD(str,len,padstr)

         将str的左边补充为padstr,直到补充成len长度的字符串并返回;如果str的长度比len长,则返回str中最左边开始的len长度的字符

(15)LTRIM(str)

         将str最左边的空格去掉并返回

(16)REPEAT(str,count)

         将str重复count并组合成字符串返回,如果count<1,则返回空串

(17)REPLACE(str,from_str,to_str)

         将所有str字符串中匹配from_str子串的地方都替换成to_str子字符串

(18)REVERSE(str)

         将str字符串中的字符按照倒序组合并返回

(19)RIGHT(str,len)

         将str字符串中从右边开始的len个字符返回

(20)RPAD(str,len,padstr)

         将字符串str从右边开始补充为padstr直到整体长度为len,如果str的长度本身大于len,则返回str中len长度的字符串

(21)RTRIM(str)

         将字符串str右边的空格去掉并返回

(22)SPACE(N)

         返回N个长度的空格组成的空字符串

(23)SUBSTRING_INDEX(str,delim,count)

         当count为正数,则返回delim出现在str字符串中第count次之前的子字符串,如果是负数,则从右边开始计算

mysql> select substring_index('www.mysql.org','.','2') AS A,substring_index('www.mysql.org','.','-2') AS B;
+-----------+-----------+
| A         | B         |
+-----------+-----------+
| www.mysql | mysql.org |
+-----------+-----------+

(24)UPPER(str)

         返回将str字符串中所有字符转换成大写的字符串。

(25)STRCMP(expr1,expr2)

         字符串对比函数,当expr1等于expr2时等于0,当expr1小于expr2时为-1,反之为1

3、数字函数

(1)ABS(X):绝对值函数

mysql> select abs(-1),abs(100),abs(0);
+---------+----------+--------+
| abs(-1) | abs(100) | abs(0) |
+---------+----------+--------+
|       1 |      100 |      0 |
+---------+----------+--------+

(2)CEILING(X)/CEIL(X):返回>=X值的最小整数

(3)FLOOR(X):返回<=X值的最大整数

mysql> select ceiling(12.13),ceil(12.13),floor(13.14);
+----------------+-------------+--------------+
| ceiling(12.13) | ceil(12.13) | floor(13.14) |
+----------------+-------------+--------------+
|             13 |          13 |           13 |
+----------------+-------------+--------------+

(4)MOD(N,M), N % M, N MOD M

         取余数操作,返回两者相除之后剩下的余数

mysql> select mod(99,8),99%8,99 mod 8; 
+-----------+------+----------+
| mod(99,8) | 99%8 | 99 mod 8 |
+-----------+------+----------+
|         3  |    3  |        3  |
+-----------+------+----------+

(5)RAND([N])

         获取0到1之间的随机小数

# 获取一个随机数,并获取100以内的随机小数
mysql> select rand(),floor(rand()*100);
+--------------------+-------------------+
| rand()              | floor(rand()*100) |
+--------------------+-------------------+
| 0.9055193242668355 |                32   |
+--------------------+-------------------+

(6)ROUND(X), ROUND(X,D)

         四舍五入为D位个小数,当D参数不存在是,则默认为0

(7)TRUNCATE(X,D)

         数字X只保留D位的小数,其余均舍弃

4、时间和日期函数

(1)CURDATE(),CURRENT_DATE()

         CURDATE()和CURRENT_DATE()函数作用相同,将当前的日期按照’YYYY-MM-DD’或’YYYYMMDD’格式的值返回。

mysql> select curdate(),current_date(),curdate()+0,current_date()+0;
+------------+----------------+-------------+------------------+
| curdate()  | current_date() | curdate()+0 | current_date()+0 |
+------------+----------------+-------------+------------------+
| 2018-09-25 | 2018-09-25     |    20180925  |         20180925  |
+------------+----------------+-------------+------------------+

(2)CURTIME(),CURRENT_TIME()

    CURTIME()和CURRENT_TIME()函数作用相同,将当前的时间以’HH:MM:SS’或’HHMMSS’格式返回

mysql> select curtime(),current_time(),curtime()+0,current_time()+0;            
+-----------+----------------+-------------+------------------+
| curtime() | current_time() | curtime()+0 | current_time()+0 |
+-----------+----------------+-------------+------------------+
| 04:02:25  | 04:02:25        |       40225  |            40225  |
+-----------+----------------+-------------+------------------+

(3)CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE()

         这四个函数的作用相同,均返回当前的日期及时间,返回的日期时间格式可以自行设定。

mysql> select current_timestamp(),localtime()+0,now(),sysdate()+0;  
+---------------------+----------------+-----------------+-------------+
| current_timestamp() | localtime()+0  | now()           | sysdate()+0    |
+---------------------+----------------+-----------------+-------------+
|2018-09-25 04:06:42 |20180925040642|2018-09-25 04:06:42|20180925040642|
+---------------------+----------------+-----------------+-------------+

(4)UNIX_TIMESTAMP(date),FROM_UNIXTIME(date)

         UNIX_TIMESTAMP(date)函数为时间戳函数,若无时间参数,则返回当前时间的时间戳。

         FROM_UNIXTIME(date)函数则把时间戳转化为时间

mysql> select unix_timestamp() AS dateA,unix_timestamp(now()) AS dateB,unix_timestamp(20180926163033) AS dateC,FROM_UNIXTIME(1537863364) AS dateD;
+------------+------------+------------+---------------------+
| dateA      | dateB       | dateC       | dateD                |
+------------+------------+------------+---------------------+
| 1537863465 | 1537863465 | 1537993833 | 2018-09-25 04:16:04 |
+------------+------------+------------+---------------------+

(5)UTC_DATE(),UTC_TIME()

         UTC_DATE()用于返回当前UTC的日期值,UTC_TIME()用于返回当前UTC的时间值。

(6)MONTH(date),MONTHNAME(date)

         MONTH(date)函数用于返回date对应的月份,MONTHNAME(date)函数用于返回日期date对应月份的英文全名。

(7)DAYNAME(d),DAYOFWEEK(d),WEEKDAY(d)

         DAYNAME(d)函数返回d对应的星期的英文名称,DAYOFWEEK(d)函数返回d对应的一周中索引(1表示周日,依次类推),WEEKDAY(d)函数返回d对应的工作日索引(0表示周一,依次类推)。

mysql> select dayname(20180926),dayofweek(now()),weekday(20180926); 
+-------------------+------------------+-------------------+
| dayname(20180926) | dayofweek(now()) | weekday(20180926) |
+-------------------+------------------+-------------------+
| Wednesday         |                3    |                 2  |
+-------------------+------------------+-------------------+

(8)WEEK(d),WEEKOFYEAR(d)

         WEEK(d)和WEEKOFYEAR(d)函数都用于计算日期d是一年中的第几周。

(9)DAYOFYEAR(d),DAYOFMONTH(d)

         DAYOFYEAR(d)用于返回日期d是一年中的第几天,DAYOFMONTH(d)函数用于返回日期d是一月中的第几天。

(10)YEAR(date)、QUARTER(date)、MINUTE(time)、SECOND(time)

         YEAR(date)函数用于返回(date)对应的年,QUARTER(date)函数用于返回一年中的季度值,MINUTE(time)用于返回time对应的分钟数,SECOND(time)用于返回time对应的秒数。

(11)EXTRACT(type FROM date)

         EXTRACT(type FROM date)函数用于提取从日期中提取一部分。

mysql> select extract(year from '2018-09-26') as year,extract(day from '2018-09-26') as day,extract(minute from '2018-09-26 17:25:30') as minute;
+------+------+--------+
| year | day  | minute |
+------+------+--------+
| 2018 |   26 |     25 |
+------+------+--------+

(12)TIME_TO_SEC(time),SEC_TO_TIME(seconds)

         TIME_TO_SEC(time)函数用于将秒转化为时间格式,SEC_TO_TIME(seconds)函数用于将秒转化成时间格式。

(13)DATE_ADD(),ADDDATE(),DATE_SUB(),SUBDATE()、ADDTIME()、SUBTIME()、DATE_DIFF()

         DATE_ADD(date,INTERVAL expr type)函数和DATE_SUB(date,INTERVAL expr type)函数的作用相同,执行日期的加运算

         DATE_SUB(date,INTERVAL expr type)函数和SUBDATE(date,INTERVAL expr type)函数的作用相同,执行日期的减运算。

# 对时间的加减运算操作
mysql> select date_add('2018-09-27',interval 1 day) as addday,adddate('2018-09-27 10:55:22',interval 1 second) as addsec,date_sub('2018-09-27',interval 1 month) as sub_month,adddate('2018-09-27 10:55:22',interval '3:3' hour_minute) as sub_hour_minute;
+------------+---------------------+------------+---------------------+
| addday     | addsec                | sub_month  | sub_hour_minute     |
+------------+---------------------+------------+---------------------+
| 2018-09-28 | 2018-09-27 10:55:23 | 2018-08-27 | 2018-09-27 13:58:22 |
+------------+---------------------+------------+---------------------+

    ADDTIME(date,expr)函数将expr值添加到date,并返回修改后的值

    SUBTIME(date,expr)函数将从date中减去expr值,并返回修改后的值

# 对时间的加减
mysql> select subtime('2018-09-27 11:02:02','01:02:02') as sub_time,addtime('2018-09-27 11:02:02','00:57:58') as add_time;
+---------------------+---------------------+
| sub_time             | add_time              |
+---------------------+---------------------+
| 2018-09-27 10:00:00 | 2018-09-27 12:00:00 |
+---------------------+---------------------+

    DATEDIFF(date1,date2)函数用于返回起始时间date1和结束时间date2之间的天数。

(14)日期时间格式化函数DATE_FORMAT(date,format),TIME_FORMAT(time,format),GET_FORMAT(val_type,format_type)

         DATE_FORMAT(date,format)根据format指定的格式显示date值。

         TIME_FORMAT(time,format)根据format字符串安排time值的格式

         GET_FORMAT(val_type,format_type)返回日期时间字符串的显示格式,val_type表示日期数据类型,format_type表示格式化显示类型。

    更多的时间日期格式参考mysql官方文档(https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html)

# 对时间的类型进行格式化
mysql> select date_format('2018-09-27 11:50:20','%Y%m%d %W') as date,time_format(curtime(),'%H:%i') as time,get_format(DATETIME,'ISO') as datetime_fromat_iso,date_format(now(),get_format(DATE,'ISO')) as format;
+-------------------+-------+---------------------+------------+
| date               | time  | datetime_fromat_iso | format      |
+-------------------+-------+---------------------+------------+
| 20180927 Thursday | 01:12 | %Y-%m-%d %H:%i:%s   | 2018-09-27 |
+-------------------+-------+---------------------+------------+

5、系统信息函数

(1)获取MYSQL版本号、连接数和数据库名的函数

         VERSION():返回指示MYSQL服务器版本的字符串。

         CONNECTION_ID():返回mysql服务器当前连接的次数

         DATABASE()、SCHEMA()函数均用于返回使用utf8字符集的当前默认数据库名

# 获取mysql数据库的一些信息
mysql> select version(),connection_id(),database(),schema();
+-----------+-----------------+------------+----------+
| version() | connection_id() | database() | schema() |
+-----------+-----------------+------------+----------+
| 5.7.23    |               9 | mysql      | mysql    |
+-----------+-----------------+------------+----------+
# 查看正在连接mysql的用户
mysql> show processlist;
+----+------+-----------+--------+---------+------+-------+----------+
| Id | User | Host      | db     | Command | Time | State    | Info    |         
+----+------+-----------+--------+---------+------+-------+----------+
|  9 | root | localhost | course | Query   |    0 | starting | show processlist |
+----+------+-----------+--------+--------+------+-------+----------+

(2)获取用户名的函数

         USER(),CURRENT_USER(),SYSTEM_USER()及SESSION_USER()函数均用于返回当前被MYSQL服务器验证的用户名和主机名组合。

(3)获取字符串的字符集和排序方式函数

         CHARSET(set)函数用于返回字符串自变量的字符集

         COLLATION(str):返回字符串str字符排序方式

# 返回字符串的值以及排序方式
mysql> select charset('dayi123'),charset(convert('dayi123' USING latin1)) as charset,collation(_latin2 'dayi123');
+--------------------+---------+------------------------------+
| charset('dayi123') | charset | collation(_latin2 'dayi123') |
+--------------------+---------+------------------------------+
| utf8                | latin1   | latin2_general_ci             |
+--------------------+---------+------------------------------+

(4)获取最后一个自动生成id值得函数

         LAST_INSERT_ID()函数用于自动返回最后一个INSERT或UPDATE为AUTO_INCREMENT列设置的第一个发生的值。

# 获取最后一个自动生成的id值
mysql> select last_insert_id();
+------------------+
| last_insert_id() |
+------------------+
|              101 |
+------------------+

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章