Mysql 函数


一、数学类函数

  • ABS(x) 绝对值函数
  • PI() 圆周率函数
  • SQRT(x) 平方根函数
  • FLOOR(x) CEIL(x) CEILING(x) 取整函数
  • RAND() \ RAND(x) 随机数函数(0~1),(x) 取固定值
  • ROUND(x,y) \ ROUND(x) 四舍五入函数,(x) 保留整数
  • TRUNCATE(x,y) 截取数值函数
  • SIGN(x) 符号函数 x>0=1 x<0=-1
  • POW(x,y) POWER(x,y) EXP(y) 幂运算函数
  • LOG(x) LOG10(x) 对数函数

1、绝对值函数 ABS

ABS(x)  用于给 x 求绝对值  
一个负数的绝对值等于它的相反数,一个正数的绝对值等于他本身

mysql> SELECT ABS(10),ABS(-10);
+---------+----------+
| ABS(10) | ABS(-10) |
+---------+----------+
|      10 |       10 |
+---------+----------+

2、圆周率函数 PI

PI() 
mysql> SELECT PI();
+----------+
| PI()     |
+----------+
| 3.141593 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT PI()+0.000000002;
+------------------+
| PI()+0.000000002 |
+------------------+
|      3.141592656 |
+------------------+
1 row in set (0.00 sec)

mysql> SELECT ABS(PI()-123*3/2+123);
+-----------------------+
| ABS(PI()-123*3/2+123) |
+-----------------------+
|             58.358407 |
+-----------------------+
1 row in set (0.00 sec)


3、平方根函数 SQRT(x)

SQRT(x) 

mysql> SELECT SQRT(-9);
+----------+
| SQRT(-9) |
+----------+
|     NULL |
+----------+
1 row in set (0.00 sec)

mysql> SELECT SQRT(ABS(-9));
+---------------+
| SQRT(ABS(-9)) |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

4、取整函数 CEIL、CEILING、FLOOR

CEIL(x)		取最接近x且不小于x的整数
CEILING(X)   同上
FLOOR(X)    取最接近x且不大于x的整数

5、随机数函数 RAND

RAND()   返回随机数,范围在0~1之间,大于0 小于1
RAND(x)    x 作为种子值,用于获取固定的随机数列

6、四舍五入函数 ROUND

ROUND(x) 	对 x 进行四舍五入,结果保留整数
ROUND(x,y)  对 x 进行四舍五入,结果保留 y 位小数

mysql> SELECT ROUND(10.123),ROUND(10.567);
+---------------+---------------+
| ROUND(10.123) | ROUND(10.567) |
+---------------+---------------+
|            10 |            11 |
+---------------+---------------+

mysql> SELECT ROUND(10.123,2),ROUND(10.567,6);
+-----------------+-----------------+
| ROUND(10.123,2) | ROUND(10.567,6) |
+-----------------+-----------------+
|           10.12 |       10.567000 |
+-----------------+-----------------+	

7、截取数值的函数 TRUNCATE(x,y)

TRUNCATE (x,y)   只截取,不约分不进位

mysql> SELECT TRUNCATE(10.12,0);
+-------------------+
| TRUNCATE(10.12,0) |
+-------------------+
|                10 |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(10.123456,3);
+-----------------------+
| TRUNCATE(10.123456,3) |
+-----------------------+
|                10.123 |
+-----------------------+
1 row in set (0.00 sec)

8、符号函数 SIGN

SIGN (x) 如果 x>0,返回1,如果 x<0 返回 -1。=0,返回0

9、幂运算函数 POW、POWER、EXP

POW (x,y)   对于 x 进行幂运算,x 的 y次方
POWER (x,y)  同上
EXP(y)  计算 e 的 y 次幂  ( e 自然常数 )

mysql> SELECT POW(2,5);
+----------+
| POW(2,5) |
+----------+
|       32 |
+----------+
1 row in set (0.00 sec)

mysql> SELECT POWER(2,5);
+------------+
| POWER(2,5) |
+------------+
|         32 |
+------------+
1 row in set (0.00 sec)

10、对数函数 LOG LOG10 与 POW 联用

LOG(x)  表示以 e 为底 x 的对数
LOG10(X)  表示以 10 为底 x 的对数

mysql> SELECT LOG(7.38905609893065);
+-----------------------+
| LOG(7.38905609893065) |
+-----------------------+
|                     2 |
+-----------------------+

mysql> SELECT LOG10(10000);
+--------------+
| LOG10(10000) |
+--------------+
|            4 |
+--------------+

二、字符串函数

1、计算字符串长度的函数 LENGTH

CHAR_LENGTH (S)    计算字符个数
LENGTH (S)		  计算字符串字节长度
mysql> SELECT CHAR_LENGTH('abc');
+--------------------+
| CHAR_LENGTH('abc') |
+--------------------+
|                  3 |
+--------------------+

mysql> SELECT CHAR_LENGTH('你好');
+-----------------------+
| CHAR_LENGTH('你好')   |
+-----------------------+
|                     2 |
+-----------------------+

mysql> SELECT LENGTH('你好');
+------------------+
| LENGTH('你好')   |
+------------------+
|                6 |
+------------------+

2、链接函数 CONCAT

CONCAT (s1,s2...)			将连接函数中的字符串合并显示
CONCAT_WS (x,s1,s2...)		将 x 作为分隔符把 s1,s2.. 合并进行显示

mysql> SELECT CONCAT('My','SQL','5.5.22');
+-----------------------------+
| CONCAT('My','SQL','5.5.22') |
+-----------------------------+
| MySQL5.5.22                 |
+-----------------------------+

mysql> SELECT CONCAT_WS('-','My','SQL','5.5.22');
+------------------------------------+
| CONCAT_WS('-','My','SQL','5.5.22') |
+------------------------------------+
| My-SQL-5.5.22                      |
+------------------------------------+

--------
mysql> CREATE TABLE c_t (name VARCHAR(30),version VARCHAR(30));

mysql> INSERT INTO c_t VALUES  ('MySQL','5.5.22');

mysql> ALTER TABLE c_t ADD test_ct VARCHAR(30);

mysql> UPDATE c_t SET test_ct=CONCAT(name,version) WHERE name='Mysql';

mysql> select * from c_t;
+-------+---------+-------------+
| name  | version | test_ct     |
+-------+---------+-------------+
| MySQL | 5.5.22  | MySQL5.5.22 |
+-------+---------+-------------+
----

mysql> INSERT INTO c_t VALUES ('Redis','4.0.6',NULL);
Query OK, 1 row affected (0.01 sec)

mysql> select * from c_t;
+-------+---------+-------------+
| name  | version | test_ct     |
+-------+---------+-------------+
| MySQL | 5.5.22  | MySQL5.5.22 |
| Redis | 4.0.6   | NULL        |
+-------+---------+-------------+
2 rows in set (0.00 sec)

mysql> UPDATE c_t SET test_ct=CONCAT(name,version);

mysql> select * from c_t;
+-------+---------+-------------+
| name  | version | test_ct     |
+-------+---------+-------------+
| MySQL | 5.5.22  | MySQL5.5.22 |
| Redis | 4.0.6   | Redis4.0.6  |
+-------+---------+-------------+
---
mysql> UPDATE c_t SET test_ct=CONCAT_WS('-',name,version);
Query OK, 2 rows affected (0.01 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> select * from c_t;
+-------+---------+--------------+
| name  | version | test_ct      |
+-------+---------+--------------+
| MySQL | 5.5.22  | MySQL-5.5.22 |
| Redis | 4.0.6   | Redis-4.0.6  |
+-------+---------+--------------+
2 rows in set (0.00 sec)

/* NULL 如果元素写入CONCAT_WS mysql会把NULL 忽略,如果作为分隔符,返回NULL */
mysql> SELECT CONCAT_WS('-','A','B',NULL,'C')
    -> ;
+---------------------------------+
| CONCAT_WS('-','A','B',NULL,'C') |
+---------------------------------+
| A-B-C                           |
+---------------------------------+
1 row in set (0.00 sec)


3、空格函数 SPACE

SPACE(n) 生成指定数量的空格
mysql> SELECT SPACE(30);
+--------------------------------+
| SPACE(30)                      |
+--------------------------------+
|                                |
+--------------------------------+

mysql> SELECT LENGTH(SPACE(30));
+-------------------+
| LENGTH(SPACE(30)) |
+-------------------+
|                30 |
+-------------------+


4、替换字符串函数 INSERT

INSERT (s1,x,length,s2) 返回字符串 s1从x的位置进行替换,使用s2替换length长度

/* 如果 x 超过了字符串长度,返回原始字符串 
   如果 length 长度大于字符串长度,从x开始替换一直到结尾,如果参数中有NULL,返回NULL*/

mysql> SELECT INSERT('tfhzds',2,4,'yjssjk') AS a,
    -> INSERT ('tfhzds',100,4,'yjssjk') AS b,
    -> INSERT ('tfhzds',3,100,'yjssjk') AS c;
    
+----------+--------+----------+
| a        | b      | c        |
+----------+--------+----------+
| tyjssjks | tfhzds | tfyjssjk |
+----------+--------+----------+
1 row in set (0.00 sec)

5、获取指定长度的字符串函数 LEFT,RIGHT

LEFT(s,n)  获取字符串 s 左侧的 n 个字符
RIGHT(s,n)  获取字符串 s 右侧的 n个字符

mysql> SELECT LEFT('yjssjk',3),RIGHT('yjssjk',3);
+------------------+-------------------+
| LEFT('yjssjk',3) | RIGHT('yjssjk',3) |
+------------------+-------------------+
| yjs              | sjk               |
+------------------+-------------------+
1 row in set (0.00 sec)

mysql> insert INTO user VALUES (100000001,'a'),(100000002,'b'),(101000001,'c')
    -> ,(101000002,'d'),(100000003,'e');
Query OK, 5 

mysql> SELECT RIGHT(id,6),name FROM user WHERE id LIKE '100%';
+-------------+------+
| RIGHT(id,6) | name |
+-------------+------+
| 000001      | a    |
| 000002      | b    |
| 000003      | e    |
+-------------+------+
3 rows in set (0.00 sec)


6、填充字符串的函数

LPAD(s1,length,s2) 返回字符串s1,在s1的左侧使用s2填充到len长度
RPAD(s1,length,s2) 返回字符串s1,在s1的右侧使用s2填充到len长度

mysql> SELECT LPAD('hello',4,'?'),LPAD('hello',10,'?');
+---------------------+----------------------+
| LPAD('hello',4,'?') | LPAD('hello',10,'?') |
+---------------------+----------------------+
| hell                | ?????hello           |
+---------------------+----------------------+

/* 用到识别其他分公司 ,添加标签 */
mysql> UPDATE user SET id=LPAD(id,12,500) WHERE  id LIKE '100%';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> SELECT * FROM user;
+--------------+------+
| id           | name |
+--------------+------+
| 500100000001 | a    |
| 500100000002 | b    |
|    101000001 | c    |
|    101000002 | d    |
| 500100000003 | e    |
+--------------+------+
5 rows in set (0.00 sec)

7、删除空格的函数

LTRIM(S) 删除字符串 s 左边空格
RTRIM(S) 删除字符串 s 右边空格
TRIM(S) 删除字符串 s 两边空格

mysql> SELECT LTRIM('  A=abc  ');
+--------------------+
| LTRIM('  A=abc  ') |
+--------------------+
| A=abc              |
+--------------------+


mysql> SELECT RTRIM('  A=abc  ') as a;
+---------+
| a       |
+---------+
|   A=abc |
+---------+
1 row in set (0.00 sec)


mysql> SELECT RTRIM('  A=abc  ') as a;
+---------+
| a       |
+---------+
|   A=abc |
+---------+
1 row in set (0.00 sec)

8、删除指定字符串的函数

TRIM(s1 FROM s) 删除字符串s两侧的S1

mysql> SELECT TRIM('xy' FROM 'xyzabczyx');
+-----------------------------+
| TRIM('xy' FROM 'xyzabczyx') |
+-----------------------------+
| zabczyx                     |
+-----------------------------+
1 row in set (0.00 sec)
SE
mysql> SELECT TRIM('xy' FROM 'xyzxyabczyx');
+-------------------------------+
| TRIM('xy' FROM 'xyzxyabczyx') |
+-------------------------------+
| zxyabczyx                     |
+-------------------------------+
1 row in set (0.00 sec)


9、重复生成字符串的函数

将字符串 REPEAT(s,n) 。将字符串s重复生成 n 遍

mysql> SELECT  REPEAT('mysql',3);
+-------------------+
| REPEAT('mysql',3) |
+-------------------+
| mysqlmysqlmysql   |
+-------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO user VALUES (REPEAT(1,10),'z');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM user;
+---------------------+------+
| id                  | name |
+---------------------+------+
|        500100000001 | a    |
|        500100000002 | b    |
|           101000001 | c    |
|           101000002 | d    |
|        500100000003 | e    |
| 1111111111111111111 | z    |
|          1111111111 | z    |
+---------------------+------+
7 rows in set (0.00 sec)

10、替换函数 (员工离职后,交换工作使用)

REPLACE (s1,s2,s3)  将字符串s1中的所有 s2 使用s3 进行替换

mysql> SELECT REPLACE ('www.mysql.com','v','w');
+-----------------------------------+
| REPLACE ('www.mysql.com','v','w') |
+-----------------------------------+
| www.mysql.com                     |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> UPDATE yeji SET name=REPLACE(name,'zhangsan','wangwu');
mysql> UPDATE yeji SET name=REPLACE(name,'lisi','zhangsan') WHERE id=2;

10、比较字符串大小的函数

STRCMP(s1,s2) 比较s1和s2的大小,如果s1大---'1';如果s2大---'-1',如果相等----'0'
/* 对位比较 ,比较到第一个不相等字符,立马返回 */

mysql> SELECT STRCMP('yjs','YJS'),STRCMP('yjs2','yjs1'),STRCMP('yjs10','yjs2');
+---------------------+-----------------------+------------------------+
| STRCMP('yjs','YJS') | STRCMP('yjs2','yjs1') | STRCMP('yjs10','yjs2') |
+---------------------+-----------------------+------------------------+
|                   0 |                     1 |                     -1 |
+---------------------+-----------------------+------------------------+

11、获取子字符串函数

SUBSTRING (s,n.length)  用于获取指定位置的子字符串,n 获取多少位
MID(s,n,length)  同上
/* 如果,省略length ,将会从n位获取直到末尾,如果n为负数,将倒叙进行获取 */

mysql> SELECT SUBSTRING('yjssjk',4) AS a,
    -> SUBSTRING('yjssjk',2,3) AS b,
    -> SUBSTRING('yjssjk',-3) AS c,
    -> SUBSTRING('yjssjk',-3,2) AS d;
+------+------+------+------+
| a    | b    | c    | d    |
+------+------+------+------+
| sjk  | jss  | sjk  | sj   |
+------+------+------+------+

12、匹配子字符串开始位置的函数( 返回位置、数值 )

LOCATE(str1,str)  str1 匹配 str,str1在str的第几位
POSITION(str1 IN str)  str1 匹配 str,str1在str的第几位
INSTR(str,str1)  str1匹配 str ,str1在str的第几位
mysql> SELECT LOCATE('yjs','yjssjk'),POSITION('yjs' IN 'yjssjk'),INSTR('yssjk','sjk');
+------------------------+-----------------------------+----------------------+
| LOCATE('yjs','yjssjk') | POSITION('yjs' IN 'yjssjk') | INSTR('yssjk','sjk') |
+------------------------+-----------------------------+----------------------+
|                      1 |                           1 |                    3 |
+------------------------+-----------------------------+----------------------+

13、反转字符串函数

REVERSE(s) 将字符串s进行反转,即头变尾,尾变头

mysql> SELECT REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+

14、返回指定位置的字符串的函数

ELT(n,s1,s2,....)  用于返回第n个字符串

mysql> SELECT ELT(6,'a','b','c','d','mysql','shm');
+--------------------------------------+
| ELT(6,'a','b','c','d','mysql','shm') |
+--------------------------------------+
| shm                                  |
+--------------------------------------+
1 row in set (0.00 sec)

15、返回指定字符串位置的函数

FIELD(s,s1,s2...)  
/* FIELD 作为单次运算,检测到当时返回结果,不能重复运算 */

mysql> SELECT FIELD('hi','hello','world','mysql','hi','hi');
+------------------------------------------+
| FIELD('hi','hello','world','mysql','hi','hi') |
+------------------------------------------+
|                                        4 |
+------------------------------------------+
1 row in set (0.00 sec)

16、返回子字符串位置的函数

FIND_IN_SET(s1,s2)  返回s1 在指定范围s2内 寻找,也是单次运算
mysql> SELECT FIND_IN_SET ('chang','tiao,chang,lanqiu,rap');
+-----------------------------------------------+
| FIND_IN_SET ('chang','tiao,chang,lanqiu,rap') |
+-----------------------------------------------+
|                                             2 |
+-----------------------------------------------+


三、日期时间函数

1、获取当前日期的函数


NOW()
CURDATE()
CURRENT_DATE()

2、获取当前时间的函数

CURTIME()
CURRENT_TIME()

3、显示当前日期或者时间的函数

DATE(date)
TIME(time)
mysql> SELECT DATE(now()),time(now());
+-------------+-------------+
| DATE(now()) | time(now()) |
+-------------+-------------+
| 2019-12-09  | 15:06:44    |
+-------------+-------------+

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

CURRENT_TIMESTAMP()  当前时区时间
LOCALTIME()	 	 	 本地时间
NOW()	   			当前时间
SYSDATE()  			系统时间
mysql> SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| CURRENT_TIMESTAMP() | LOCALTIME()         | NOW()               | SYSDATE()           |
+---------------------+---------------------+---------------------+---------------------+
| 2019-12-09 15:08:48 | 2019-12-09 15:08:48 | 2019-12-09 15:08:48 | 2019-12-09 15:08:48 |
+---------------------+---------------------+---------------------+---------------------+

5、获取时间戳的函数

UNIX_TIMESTAMP()
/* 返回 时区范围内的多少秒数 */

mysql> SELECT UNIX_TIMESTAMP();
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
|       1575875638 |
+------------------+

mysql> SELECT UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP('1999-01-31 21:30:00');
+-------------------------------------------------------------+
| UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP('1999-01-31 21:30:00') |
+-------------------------------------------------------------+
|                                                   658088185 |
+-------------------------------------------------------------+

6、转换时间戳的函数

FROM_UNIXTIME()
/* 精确到秒数,将时间戳转换成日期时间 */

mysql> SELECT FROM_UNIXTIME(1575877828);
+---------------------------+
| FROM_UNIXTIME(1575877828) |
+---------------------------+
| 2019-12-09 15:50:28       |
+---------------------------+

7、获取UTC日期和时间的函数(UTC世界标准时间)

UTC_DATE()
UTC_TIME()

mysql> select UTC_DATE(),UTC_TIME();
+------------+------------+
| UTC_DATE() | UTC_TIME() |
+------------+------------+
| 2019-12-09 | 07:52:24   |
+------------+------------+ 

8、获取月份的函数

MONTH(date) 获取月份对应的序号
MONTHNAME(date)	 获取月份对应的英文

mysql> SELECT MONTH(now());
+--------------+
| MONTH(now()) |
+--------------+
|           12 |
+--------------+
1 row in set (0.00 sec)

mysql> SELECT MONTHNAME(now());
+------------------+
| MONTHNAME(now()) |
+------------------+
| December         |
+------------------+

9、获取星期的函数

DAYNAME(date)  		返回日期对应的工作日的英文名
DAYOFWEEK(date)		返回日期对应的一周中的位置,周日为1,依次类推
WEEKDAY(date)		返回日期对应的一周中的位置,周一为0,依次类推
WEEK(date)			返回日期在一年中是第多少周,以0记为第一周
WEEKOFYEAR(date)	返回日期在一年中是第多少周,以1记为第一周

mysql> SELECT DAYNAME(NOW()),dayofweek(NOW()),WEEKDAY(NOW()),WEEK(NOW()),WEEKOFYEAR(NOW());
+----------------+------------------+----------------+-------------+-------------------+
| DAYNAME(NOW()) | dayofweek(NOW()) | WEEKDAY(NOW()) | WEEK(NOW()) | WEEKOFYEAR(NOW()) |
+----------------+------------------+----------------+-------------+-------------------+
| Monday         |                2 |              0 |          49 |                50 |
+----------------+------------------+----------------+-------------+-------------------+

10、获取天数的函数

DAYOFYEAR(date)  返回指定日期在一年中是第几天
DAYOFMONTH(date)  返回指定日期在一月中是第几天
mysql> SELECT DAYOFYEAR(NOW()),DAYOFMONTH(NOW());
+------------------+-------------------+
| DAYOFYEAR(NOW()) | DAYOFMONTH(NOW()) |
+------------------+-------------------+
|              343 |                 9 |
+------------------+-------------------+
1 row in set (0.00 sec)

11、获取年份的函数

YEAR(date)

12、获取季度的函数

QUARTER(date)
mysql> SELECT QUARTER(NOW());
+----------------+
| QUARTER(NOW()) |
+----------------+
|              4 |
+----------------+
1 row in set (0.00 sec)

13、获取小时、分钟、秒钟的函数

HOUR(time)
MINUTE(time)
SECOND(time) 

mysql> SELECT HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
+-------------+---------------+---------------+
| HOUR(NOW()) | MINUTE(NOW()) | SECOND(NOW()) |
+-------------+---------------+---------------+
|          16 |            17 |            55 |
+-------------+---------------+---------------+

14、获取日期指定值函数

EXTRACT(type FROM date)

mysql> SELECT EXTRACT(MONTH FROM NOW()) AS A,
    -> EXTRACT(DAY FROM NOW()) AS B,
    -> EXTRACT(YEAR_MONTH FROM NOW()) AS C;
+------+------+--------+
| A    | B    | C      |
+------+------+--------+
|   12 |   10 | 201912 |
+------+------+--------+

15、时间和秒钟互相转换的函数

TIME_TO_SEC(time)  将时间转换为秒数
SEC_TO_TIME(time)  将秒数转换为时间
mysql> SELECT SEC_TO_TIME(48894),TIME_TO_SEC('24:00:00');
+--------------------+-------------------------+
| SEC_TO_TIME(48894) | TIME_TO_SEC('24:00:00') |
+--------------------+-------------------------+
| 13:34:54           |                   86400 |
+--------------------+-------------------------+

16、对日期和时间进行操作的函数

DATE_ADD(date,INTERVAL expr type) 对日期进行加运算  INTERVAL(间隔)
ADDDATE(date,INTERVAL expr type) 同上
DATE_SUB(date,INTERVAL expr type) 对日期进行减运算
SUBDATE(date,INTERVAL expr type) 同上
ADDTIME(date,expr) 对时间进行加运算
SUBTIME(date,expr) 对时间进行减运算
DATEDIFF(date1,date2) 计算两个日期之间的间隔,DATE1大返回正数,DATE2大返回负数

/* DATE_ADD */
mysql> SELECT DATE_ADD('2019-12-31 23:59:59',INTERVAL 1 SECOND);
+---------------------------------------------------+
| DATE_ADD('2019-12-31 23:59:59',INTERVAL 1 SECOND) |
+---------------------------------------------------+
| 2020-01-01 00:00:00                               |
+---------------------------------------------------+

mysql> SELECT DATE_ADD('2019-12-31 23:59:59',INTERVAL '1:1:1' HOUR_SECOND);
+--------------------------------------------------------------+
| DATE_ADD('2019-12-31 23:59:59',INTERVAL '1:1:1' HOUR_SECOND) |
+--------------------------------------------------------------+
| 2020-01-01 01:01:00                                          |
+--------------------------------------------------------------+


/* ADDTIME */
mysql> SELECT ADDTIME(NOW(),'1 1:1');
+------------------------+
| ADDTIME(NOW(),'1 1:1') |
+------------------------+
| 2019-12-11 14:52:23    |
+------------------------+

/* DATEDIFF */
mysql> SELECT DATEDIFF('2019-12-10','2020-01-01');
+-------------------------------------+
| DATEDIFF('2019-12-10','2020-01-01') |
+-------------------------------------+
|                                 -22 |
+-------------------------------------+


17、对日期或者时间进行格式化的函数

DATE_FORMAT(date,format)  将指定的日期进行格式化
TIME_FORMAT(date,format)  将指定的时间进行格式化
GET_FORMAT(value_type,format_type)  将数据格式化成想要的类型

/* DATE_FORMAT */
%W(大) 工作日对应星期的英文名
%w(小) 工作日对应星期的序号
%M(大) 工作月对应的英文名
%m(小) 工作月对应的序号
%Y(大) 年份(四位)
%y(小) 年份(两位)
语法:
SELECT  DATE_FORMAT(now(),'%Y-%m,%w');

/* TIME_FORMAT */
%H(大)  以两位数形式显示24小时制
%k(小)  以一位数(不满10)形式显示24小时制
%I(大)  以两位数形式显示12小时制
mysql> SELECT TIME_FORMAT('8:00:00','%H %k %I');
+-----------------------------------+
| TIME_FORMAT('8:00:00','%H %k %I') |
+-----------------------------------+
| 08 8 08                           |
+-----------------------------------+

/* GET_FORMAT */
'将现有日期显示为美国的时间格式'
mysql> SELECT DATE_FORMAT(NOW(),GET_FORMAT(date,'EUR'));
+-------------------------------------------+
| DATE_FORMAT(NOW(),GET_FORMAT(date,'EUR')) |
+-------------------------------------------+
| 10.12.2019                                |
+-------------------------------------------+'

'将现有日期显示为日本的时间格式'
mysql> SELECT DATE_FORMAT(NOW(),GET_FORMAT(date,'JIS'));
+-------------------------------------------+
| DATE_FORMAT(NOW(),GET_FORMAT(date,'JIS')) |
+-------------------------------------------+
| 2019-12-10                                |
+-------------------------------------------+

'将现有日期显示为国际化的显示格式'
mysql> SELECT DATE_FORMAT(NOW(),GET_FORMAT(date,'INTERNAL'));
+------------------------------------------------+
| DATE_FORMAT(NOW(),GET_FORMAT(date,'INTERNAL')) |
+------------------------------------------------+
| 20191210                                       |
+------------------------------------------------+

/* 只获取年月 */

mysql> SELECT DATE_FORMAT(NOW(),'%Y.%m')


四、判断函数

1、IF 条件判断

/* 结果和v1,v2中写入的数据没有直接关系 */
IF (expr,v1,v2) 如果expr为true返回v1,否则返回v2

mysql> SELECT IF(1+1>2,'ok','no'),IF(1+1=2,'yes','rang');
+---------------------+------------------------+
| IF(1+1>2,'ok','no') | IF(1+1=2,'yes','rang') |
+---------------------+------------------------+
| no                  | yes                    |
+---------------------+------------------------+

2、IF NULL 判断是否为空

IFNULL(v1,v2) 如果v1不为null,返回v1,如果为空,返回v2
mysql> SELECT IFNULL(5,10),IFNULL(NULL,10);
+--------------+-----------------+
| IFNULL(5,10) | IFNULL(NULL,10) |
+--------------+-----------------+
|            5 |              10 |
+--------------+-----------------+


3、CASE 选择判断

CASE expr WHEN v1 THEN r1 [WHEN v2 THEN v2...] [ELSE rn] END 
对于 expr 进行判断,如果符合v1返回r1;如果符合v2返回r2;如果都不满足返回ELSE中的 rn。

mysql> SELECT CASE 1+1 WHEN 1 THEN 'ERROR' WHEN 2 THEN 'RIGHT' ELSE 'REQUEST' END;
+----------------------------------------------------------------+
| CASE 1+1 WHEN 1 THEN 'ERROR' WHEN 2 THEN 'RIGHT' ELSE 'REQUEST' END |
+----------------------------------------------------------------+
| RIGHT                                                          |
+----------------------------------------------------------------+

/* 判断性别 */
mysql> SELECT CASE WHEN sex=1 THEN '男' WHEN sex=0 THEN '女' ELSE '其他' END FROM class;
+--------------------------------------------------------------------+
| CASE WHEN sex=1 THEN '男' WHEN sex=0 THEN '女' ELSE '其他' END     |
+--------------------------------------------------------------------+
| 其他                                                               |
| 女                                                                 |
| 男                                                                 |
+--------------------------------------------------------------------+
mysql> SELECT *,CASE WHEN sex=1 THEN '男' WHEN sex=0 THEN '女' ELSE '其他' END AS sex FROM class;
+----+------+------+--------+
| id | name | sex  | sex    |
+----+------+------+--------+
|  1 | ljj  | 3    | 其他   |
|  2 | ckx  | 0    | 女     |
|  3 | bg   | 1    | 男     |
+----+------+------+--------+


五、系统函数

1、系统版本号函数

VERSION()

2、查看当前用户链接ID的函数

CONNECTION_ID() 连接mysql的次数

mysql> SHOW PROCESSLIST;
+----+-------+-----------+------+---------+------+-------+------------------+
| Id | User  | Host      | db   | Command | Time | State | Info             |
+----+-------+-----------+------+---------+------+-------+------------------+
|  1 | root  | localhost | NULL | Query   |    0 | init  | SHOW PROCESSLIST |
|  3 | user1 | localhost | NULL | Sleep   |   17 |       | NULL             |
+----+-------+-----------+------+---------+------+-------+------------------+

3、查看用户连接信息的函数

SHOW PROCESSLIST
KILL 用户ID  强制指定用户下线

mysql> SHOW PROCESSLIST;
+----+-------+-----------+------+---------+------+-------+------------------+
| Id | User  | Host      | db   | Command | Time | State | Info             |
+----+-------+-----------+------+---------+------+-------+------------------+
|  1 | root  | localhost | NULL | Query   |    0 | init  | SHOW PROCESSLIST |
|  3 | user1 | localhost | NULL | Sleep   |   17 |       | NULL             |
+----+-------+-----------+------+---------+------+-------+------------------+

mysql> KILL 3;
/* 根据ID 杀死用户登录进程 */

4、查看当前使用的数据库的函数

DATABASE()
SCHEMA()

5、查看当前用户名登录的函数

USER()
CURRENT_USER()
SYSTEM_USER()

mysql> SELECT USER(),CURRENT_USER(),system_user();
+-----------------+-----------------+-----------------+
| USER()          | CURRENT_USER()  | system_user()   |
+-----------------+-----------------+-----------------+
| user1@localhost | user1@localhost | user1@localhost |
+-----------------+-----------------+-----------------+

6、查看字符集的函数

CHARSET()

/* 查看Mysql所支持的字符集*/
SHOW CHARSET;

/* 创建库时指定字符集 */
CREATE DATABASE 库名 DEFAULT CHARACTER SET=字符集;

/* 创表时指定字符集 */
CREATE TABLE 表名(字段1属性,字段2属性...) DEFAULT CHARACTER SET=字符集;

6-1、改变字符集的函数

CHARSET(CONVERT(...USING...))  临时修改

mysql> SELECT CHARSET(CONVERT('abc' USING latin1));
+--------------------------------------+
| CHARSET(CONVERT('abc' USING latin1)) |
+--------------------------------------+
| latin1                               |
+--------------------------------------+

7、改变数据类型的函数

CAST(x AS type) 将 x 以指定的 type类型显示,不支持VARCHAR
CONVERT(x,type) 同上

mysql> SELECT CAST(50 AS CHAR(2));
+----------------------+
| CAST(500 AS CHAR(2)) |
+----------------------+
| 50                   |
+----------------------+

8、查看字符集排序规则的函数

COLLATION(tar)
mysql> SELECT CHARSET('abc'),COLLATION('abv');
+----------------+------------------+
| CHARSET('abc') | COLLATION('abv') |
+----------------+------------------+
| utf8           | utf8_general_ci  |
+----------------+------------------+
1 row in set (0.00 sec)

9、重复执行指定操作的函数

BENCHMARK(count,expr) 用于计算服务器性能的函数,检测速度,做的操作越短效率越高

mysql> SELECT BENCHMARK(500000,PASSWORD('123.COM'));
+---------------------------------------+
| BENCHMARK(500000,PASSWORD('123.COM')) |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
1 row in set (0.07 sec)


六、加密解密函数

1、HASH加密

PASSWORD(str) 将str 进行HASH 加密  (密码)
mysql> SELECT MD5('123.COM');
+----------------------------------+
| MD5('123.COM')                   |
+----------------------------------+
| b6bdeecca9b752d2759a279d538e03f9 |
+----------------------------------+

2、MD5 加密函数

MD5(str) 将 Str 进行md5加密,变成32位十六进制字符串  (软件)

mysql> SELECT MD5('123.COM');
+----------------------------------+
| MD5('123.COM')                   |
+----------------------------------+
| b6bdeecca9b752d2759a279d538e03f9 |
+----------------------------------+

3、ENCODE、DECODE函数

ENCODE(str,passwd_str) 
使用 passwd_str作为密码,加密str,变成二进制数据,可逆转  (二级密码)

案例1:
mysql> SELECT ENCODE('yjs','123.com');
+-------------------------+
| ENCODE('yjs','123.com') |
+-------------------------+
| ә񞞠                    |
+-------------------------+

DECODE(crpty_str,passwd_str) 
使用 passwd-str 解密之前加密过的 crypt_str
mysql> SELECT DECODE(ENCODE('yjs','123.com'),'123.com');
+-------------------------------------------+
| DECODE(ENCODE('yjs','123.com'),'123.com') |
+-------------------------------------------+
| yjs                                       |
+-------------------------------------------+

案例2:
mysql> CREATE TABLE jiami( event1 VARCHAR(255), pswd BLOB);

mysql> INSERT INTO jiami VALUES (1,ENCODE('jintianhenkaxin','123.com'));

mysql> SELECT * FROM jiami;
+--------+-----------------+
| event1 | pswd            |
+--------+-----------------+
| 1      | ʼwA	¼ǂ񁵠        |
+--------+-----------------+
mysql> SELECT DECODE(pswd,'123.com') FROM jiami;
+------------------------+
| DECODE(pswd,'123.com') |
+------------------------+
| jintianhenkaxin        |
+------------------------+

4、加锁函数 解锁函数 (底层编程使用)

GET_LOCK(str,timeout) 使用 str得到一个锁,超时时间为 timeout 秒
	1、如果成功得到锁,返回1
	2、如果操作超时,返回0
	3、如果出现错误,返回NULL
RELEASE_LOCK(str) 解锁
	1、如果解锁成功,得到1
	2、如果'该线程尚未创建锁',返回0
	3、如果锁不存在返回NULL 
注意:提前解除锁等同于锁不存在

IS_FREE_LOCK(str)
	1、如果可用返回1
	2、如果正被使用,返回0
	3、如果参数出错返回NULL
IS_USED_LOCK(str) 判断名为str的锁是否正被使用,如果被使用,返回该用户的标识符,如果没被使用返回NULL

/* 如果该用户断开和mysql的连接或者强制下线,加过的锁自动被释放 */

mysql> SELECT GET_LOCK('yjs',10);
+--------------------+
| GET_LOCK('yjs',10) |
+--------------------+
|                  1 |
+--------------------+
mysql> SELECT RELEASE_LOCK('yjs');
+---------------------+
| RELEASE_LOCK('yjs') |
+---------------------+
|                   1 |
+---------------------+

mysql> SELECT IS_USED_LOCK('yjs1');
+----------------------+
| IS_USED_LOCK('yjs1') |
+----------------------+
|                    2 |
+----------------------+



七、进制函数

1、格式化函数

FORMAT(x,n) 将x进行格式化,结果以四舍五入的形式保留小数点后面N位,结果以字符串形式返回

mysql> SELECT FORMAT(13.454553,4),FORMAT(1.3456,3),FORMAT(1.2,3);
+---------------------+------------------+---------------+
| FORMAT(13.454553,4) | FORMAT(1.3456,3) | FORMAT(1.2,3) |
+---------------------+------------------+---------------+
| 13.4546             | 1.346            | 1.200         |
+---------------------+------------------+---------------+

2、不同进制的数据进行互相转换的函数

CONV(要转换的数据,该数据的进制,转换成的数据)

mysql> SELECT CONV(16,16,10);
+----------------+
| CONV(16,16,10) |
+----------------+
| 22             |
+----------------+

3、IP地址和数值互换的函数

INET_ATON(expr) IP地址 转换 数值
INET_NTOA(expr)  数值 转换 IP地址
mysql> SELECT INET_ATON('255.255.255.255');
+------------------------------+
| INET_ATON('255.255.255.255') |
+------------------------------+
|                   4294967295 |
+------------------------------+


mysql> SELECT INET_NTOA('4294967295');
+-------------------------+
| INET_NTOA('4294967295') |
+-------------------------+
| 255.255.255.255         |
+-------------------------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值