单行函数理解

一、函数的理解

可以把我们经常使用的代码封装起来,需要的时候直接调用即可。

这样既 提高了代码效率 ,又 提高了可维护性 。

在 SQL 中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地 提高用户对数据库的管理效率 。

从函数定义的角度出发,我们可以将函数分成 内置函数 和 自定义函数 。

MySQL的内置函数及分类
单行函数
聚合函数(或分组函数)
在这里插入图片描述

二、数值函数

基本函数

在这里插入图片描述

角度与弧度互换函数

角度——30°
弧度——Π/6
在这里插入图片描述

三角函数

在这里插入图片描述

指数与对数

在这里插入图片描述

进制间的转换

在这里插入图片描述

mysql> SELECT BIN(10),HEX(10),OCT(10),CONV(10,2,8)
    -> FROM DUAL;
+---------+---------+---------+--------------+
| BIN(10) | HEX(10) | OCT(10) | CONV(10,2,8) |
+---------+---------+---------+--------------+
| 1010    | A       | 12      | 2            |
+---------+---------+---------+--------------+
1 row in set (0.00 sec)

字符串函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:MySQL中,字符串的位置是从1开始的。

日期与时间函数

获取时间、日期

在这里插入图片描述

日期与时间戳的转换

在这里插入图片描述

获取月份、星期、星期数、天数等函数

在这里插入图片描述

日期的操作函数

在这里插入图片描述
在这里插入图片描述

SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW()),
EXTRACT( QUARTER FROM NOW()),EXTRACT( MINUTE_SECOND FROM NOW())
FROM DUAL;

注意:EXTRACT后面不能有空格,否则报错!!!
EXTRACT(XXXXXXXX);才行

时间和秒钟转换的函数

在这里插入图片描述

计算日期和时间的函数

在这里插入图片描述
上述函数中type的取值:
在这里插入图片描述

SELECT DATE_ADD(NOW(), INTERVAL 1 DAY) AS col1,DATE_ADD('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col2,
ADDDATE('2021-10-21 23:32:12',INTERVAL 1 SECOND) AS col3,
DATE_ADD('2021-10-21 23:32:12',INTERVAL '1_1' MINUTE_SECOND) AS col4,#分钟和秒各加一
DATE_ADD(NOW(), INTERVAL -1 YEAR) AS col5, #可以是负数
DATE_ADD(NOW(), INTERVAL '1_1' YEAR_MONTH) AS col6 #需要单引号,年份和月份各加一
FROM DUAL;
SELECT DATE_SUB('2021-01-21',INTERVAL 31 DAY) AS col1,
SUBDATE('2021-01-21',INTERVAL 31 DAY) AS col2,
DATE_SUB('2021-01-21 02:01:01',INTERVAL '1 1' DAY_HOUR) AS col3
FROM DUAL;

在这里插入图片描述

#查询 7 天内的新增用户数有多少?
SELECT COUNT(*) AS num FROM new_user WHERE TO_DAYS(NOW())-TO_DAYS(regist_time)<=7;

日期的格式化与解析

在这里插入图片描述
上述非GET_FORMAT函数中fmt参数常用的格式符:
在这里插入图片描述
GET_FORMAT函数中date_type和format_type参数取值如下:
在这里插入图片描述

mysql> SELECT DATE_FORMAT(NOW(), '%H:%i:%s');
+--------------------------------+
| DATE_FORMAT(NOW(), '%H:%i:%s') |
+--------------------------------+
| 22:57:34                        |
+--------------------------------+
1 row in set (0.00 sec)
SELECT STR_TO_DATE('09/01/2009','%m/%d/%Y')
FROM DUAL;

SELECT STR_TO_DATE('20140422154706','%Y%m%d%H%i%s')
FROM DUAL;

SELECT STR_TO_DATE('2014-04-22 15:47:06','%Y-%m-%d %H:%i:%s')
FROM DUAL;
mysql> SELECT GET_FORMAT(DATE, 'USA');
+-------------------------+
| GET_FORMAT(DATE, 'USA') |
+-------------------------+
| %m.%d.%Y                |
+-------------------------+
1 row in set (0.00 sec)

SELECT DATE_FORMAT(NOW(),GET_FORMAT(DATE,'USA')),
FROM DUAL;
mysql> SELECT STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d'); 
+-----------------------------------------------+
| STR_TO_DATE('2020-01-01 00:00:00','%Y-%m-%d') |
+-----------------------------------------------+
| 2020-01-01                                    |
+-----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

流程控制函数

MySQL中的流程处理函数主要包括IF()、IFNULL()和CASE()函数。
在这里插入图片描述

SELECT IF(1 > 0,'正确','错误')    
->正确
SELECT IFNULL(null,'Hello Word')
->Hello Word
SELECT employee_id,salary, CASE WHEN salary>=15000 THEN '高薪' #salary后面的逗号必须加
WHEN salary>=10000 THEN '潜力股'  
WHEN salary>=8000 THEN '屌丝' 
ELSE '草根' END AS "描述"
FROM employees; 
#case后面那一堆相当于和salary一样,是一个字段

+-------------+----------+--------+
| employee_id | salary   | 描述   |
+-------------+----------+--------+
|         100 | 24000.00 | 高薪   |
|         101 | 17000.00 | 高薪   |
|         102 | 17000.00 | 高薪   |
|         103 |  9000.00 | 屌丝   |
|         104 |  6000.00 | 草根   |


#如果没有重命名为“描述”,则会显示:
+-------------+----------+------------------------------------------------------------------------------------------------------------------------------+
| employee_id | salary   | CASE WHEN salary>=15000 THEN '高薪'
  WHEN salary>=10000 THEN '潜力股'
  WHEN salary>=8000 THEN '屌丝'
  ELSE '草根' END |
+-------------+----------+------------------------------------------------------------------------------------------------------------------------------+
|         100 | 24000.00 | 高薪                                                                                                                         |
|         101 | 17000.00 | 高薪                                                                                                                         |
|         102 | 17000.00 | 高薪                                                                                                                         |
|         103 |  9000.00 | 屌丝                                                                                                                         |
|         104 |  6000.00 | 草根                                                                                                                         |
|         105 |  4800.00 | 草根                                                                                                                         |

#相当于整个CASE表达式作为这个列的标题

加密与解密函数

加密与解密函数主要用于对数据库中的数据进行加密和解密处理,以防止数据被他人窃取。这些函数在保证数据库安全时非常有用。8.0已弃用,不推荐使用
在这里插入图片描述

mysql> SELECT PASSWORD('mysql'), PASSWORD(NULL);
+-------------------------------------------+----------------+
| PASSWORD('mysql')                         | PASSWORD(NULL) |
+-------------------------------------------+----------------+
| *E74858DB86EBA20BC33D0AECAE8A8108C56B17FA |                |
+-------------------------------------------+----------------+
1 row in set, 1 warning (0.00 sec)
mysql> SELECT ENCODE('mysql', 'mysql');
+--------------------------+
| ENCODE('mysql', 'mysql') |
+--------------------------+
| íg ¼ ìÉ                  |
+--------------------------+
1 row in set, 1 warning (0.01 sec)
mysql> SELECT DECODE(ENCODE('mysql','mysql'),'mysql');
+-----------------------------------------+
| DECODE(ENCODE('mysql','mysql'),'mysql') |
+-----------------------------------------+
| mysql                                   |
+-----------------------------------------+
1 row in set, 2 warnings (0.00 sec)

MySQL信息函数

MySQL中内置了一些可以查询MySQL信息的函数,这些函数主要用于帮助数据库开发或运维人员更好地对数据库进行维护工作。
在这里插入图片描述

其他函数

MySQL中有些函数无法对其进行具体的分类,但是这些函数在MySQL的开发和运维过程中也是不容忽视的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值