【笔记】【MySQL5.7 从入门到精通】第06章 MySQL函数

目录

6.2 数学函数

6.2.1 ABS(X) && PI()

6.2.2 SQRT(X) && MOD(X,Y)

6.2.3 CEIL(X) && CEILING(X) && FLOOR(X)

6.2.4 RAND && RAND(X)

6.2.5 ROUND(x) && ROUND(X,Y) && TRUNCATE(X,Y)

6.2.6 SIGN(X)

6.2.7 POW(X,Y) && POWER(X,Y) && EXP(x)

6.2.8 LOG(X) && LOG10(X)

 6.2.9 RADIANS(X) && DEGREES(X)

6.2.10 SIN(X) && ASIN(X) && COS(X) && ACOS(X) && TAN(X) && ATAN(X) && COT(X)

6.3 字符串函数

6.3.1 CHAR_LENGTH(STR) && LENGTH(STR)

6.3.2 CONCAT(S1,S2,...) && CONCAT_WS(X, S1,S2,...)

6.3.3 INSERT(S1, X, LEN, S2)

6.3.4 LOWER(STR) && LCASE(STR) && UPPER(STR) && UCASE(STR)

6.3.5 LEFT(S,N) && RIGHT(S,N)

6.3.6 LPAD(S1,LEN,S2) && RPAD(S1,LEN,S2)

6.3.7 LTRIM(S) && RTRIM(S) && TRIM(S)

6.3.8 TRIM(S1 FROM S)

6.3.9 REPECAT(S,N)

6.3.10 SPACE(N) && REPLACE(S,S1,S2)

6.3.11 STRCMP(S1,S2)

6.3.12 SUBSTRING(S,N,LEN) && MIN(S,N,LEN)

6.3.13 LOCATE(STR1,STR) && POSITION(STR1 IN STR) && INSTR(STR, STR1)

6.3.14 REVERSE(S)

6.3.15 ELT

6.3.16 FIELD

6.3.17 FIND_IN_SET

6.3.18 MAKE_SET

6.4 日期和时间函数

6.4.1 CURDATE && CURRENT_DATE && CURTIME && CURRENT_TIME

6.4.2 CURRENT_TIMESTAMP && LOCALTIME && NOW && SYSDATE

6.4.3  UNIX_TIMESTAMP

6.4.4 UTC_DATE && UTC_TIME

6.5 条件判断

6.6 系统信息函数

6.7 加密/解密

6.8 其他函数


 

6.2 数学函数

6.2.1 ABS(X) && PI()

SELECT ABS(2), ABS(-3.3), ABS(-33);
SELECT PI();

6.2.2 SQRT(X) && MOD(X,Y)

 SELECT SQRT(9), SQRT(40), SQRT(-49);
 SELECT MOD(31,8),MOD(234, 10),MOD(45.5,6);

6.2.3 CEIL(X) && CEILING(X) && FLOOR(X)

 SELECT CEIL(-3.35),CEILING(3.35);
 SELECT FLOOR(-3.35), FLOOR(3.35);

6.2.4 RAND && RAND(X)

 SELECT RAND(),RAND(),RAND();
 SELECT RAND(10),RAND(10),RAND(11);

6.2.5 ROUND(x) && ROUND(X,Y) && TRUNCATE(X,Y)

-- ROUND(X) 返回最接近与参数X的整数,对X进行四舍五入
-- ROUND(X,Y) 返回最接近于X的数,其值保留到小数点后的Y位,若Y为负值,则将保留X值到小数点左边的Y位
-- TRUNCATE(X,Y) 返回被社区至小数点后Y位的数字X。若Y的值位0,则结果不带有小数点或不带有小数部分
--               若Y设置为负数,则截去X小数点左起第Y位开始后面所有低位的值
 SELECT ROUND(-1.14),ROUND(-1.67), ROUND(1.14),ROUND(1.66);
 SELECT ROUND(1.38, 1), ROUND(1.38, 0), ROUND(232.38, -1), ROUND(232.38,-2);
 SELECT TRUNCATE(1.31,1), TRUNCATE(1.99,1), TRUNCATE(1.99,0), TRUNCATE(19.99,-1);

6.2.6 SIGN(X)

-- 返回参数的符号,X位负、零、正时,分别返回-1、0、1
 SELECT SIGN(-21),SIGN(0), SIGN(21);

6.2.7 POW(X,Y) && POWER(X,Y) && EXP(x)

 SELECT POW(2,2), POWER(2,2),POW(2,-2), POWER(2,-2);
 SELECT EXP(3),EXP(-3),EXP(0);

6.2.8 LOG(X) && LOG10(X)

SELECT LOG(3), LOG(-3);
SELECT LOG10(2), LOG10(100), LOG10(-100);

 6.2.9 RADIANS(X) && DEGREES(X)

SELECT RADIANS(90),RADIANS(180);
SELECT DEGREES(PI()), DEGREES(PI() / 2);

6.2.10 SIN(X) && ASIN(X) && COS(X) && ACOS(X) && TAN(X) && ATAN(X) && COT(X)

SELECT SIN(1), ROUND(SIN(PI()));
SELECT ASIN(0.8414709848078965), ASIN(3);
SELECT COS(0),COS(PI()),COS(1);
SELECT ACOS(1),ACOS(0), ROUND(ACOS(0.5403023058681398));
SELECT TAN(0.3), ROUND(TAN(PI()/4));
SELECT ATAN(0.30933624960962325), ATAN(1);
SELECT COT(0.3), 1/TAN(0.3),COT(PI() / 4);

6.3 字符串函数

6.3.1 CHAR_LENGTH(STR) && LENGTH(STR)

-- CHAR_LENGTH 返回字符长度,一个多字节字符算作一个单字符
-- LENGTH      返回字节长度
SELECT CHAR_LENGTH('date'), CHAR_LENGTH('egg');
SELECT LENGTH('date'), LENGTH('egg');

6.3.2 CONCAT(S1,S2,...) && CONCAT_WS(X, S1,S2,...)

CONCAT 返回连接参数产生的字符串,或许有一个或多个参数。如有任何一个参数位NULL,则结果返回NULL。如果所有参数都是非二进制字符串,则结果位非二进制字符串。如果自变量中含有任意一个二进制字符串,则结果返回一个二进制字符串

CONCAT_WS 使用X参数作为分隔符,连接字符串

 SELECT CONCAT('My SQL', '5.6'),CONCAT('My',NULL, 'SQL');
 SELECT CONCAT_WS('-', '1st','2nd', '3rd'), CONCAT_WS('*', '1st', NULL, '3rd');

6.3.3 INSERT(S1, X, LEN, S2)

返回字符串S1,其子字符串起始于X位置和被字符串取代的LEN字符。如果X出熬过字符串的长度,则返回原始字符串。接入LEN的长度大于其他字符串的长度。则从位置X开始转换。若任何一个参数位NULL,则返回NULL

SELECT INSERT('Quest', 2, 4, 'What') AS col1,
       INSERT('Quest', -1, 4, 'What') AS col2, 
       INSERT('Quest', 3, 100, 'Wh') AS col3;

6.3.4 LOWER(STR) && LCASE(STR) && UPPER(STR) && UCASE(STR)

SELECT LOWER('BEAUTIFUL'), LCASE('Well');
SELECT UPPER('black'), UCASE('BLacK');

6.3.5 LEFT(S,N) && RIGHT(S,N)

SELECT LEFT('football', 5);
SELECT RIGHT('football', 4);

6.3.6 LPAD(S1,LEN,S2) && RPAD(S1,LEN,S2)

将字符串S1通过S2补全或截断到LEN长度

SELECT LPAD('hello',4,'??'), LPAD('hello',10,'??');
SELECT RPAD('hello',4,'?'), RPAD('hello',10,'?');

6.3.7 LTRIM(S) && RTRIM(S) && TRIM(S)

SELECT '(  book  )', CONCAT('(', LTRIM ('  book  '),')');
SELECT '(  book  )', CONCAT('(', RTRIM ('  book  '),')');
SELECT '(  book  )', CONCAT('(', TRIM  ('  book  '),')');

6.3.8 TRIM(S1 FROM S)

删除字符串S中两端所有的子字符串S1。S1为可选项,在未指定情况下,删除空格

SELECT TRIM('xy' FROM 'xyxboxyokxxyxy') ;

6.3.9 REPECAT(S,N)

SELECT REPEAT('MySQL', 3);

6.3.10 SPACE(N) && REPLACE(S,S1,S2)

SELECT CONCAT('(', SPACE(6), ')' );
SELECT REPLACE('xxx.mysql.com', 'x', 'w');

6.3.11 STRCMP(S1,S2)

SELECT STRCMP('txt', 'txt2'),STRCMP('txt2', 'txt'), STRCMP('txt', 'txt');

6.3.12 SUBSTRING(S,N,LEN) && MIN(S,N,LEN)

SELECT SUBSTRING('breakfast', 5   ) AS col1, 
       SUBSTRING('breakfast', 5, 3) AS col2,
       SUBSTRING('lunch',    -3   ) AS col3,
       SUBSTRING('lunch',    -5, 3) AS col4;

SELECT MID('breakfast',       5   ) as col1, 
       MID('breakfast',       5, 3) as col2,
       MID('lunch',          -3   ) as col3, 
       MID('lunch',          -5, 3) as col4;

6.3.13 LOCATE(STR1,STR) && POSITION(STR1 IN STR) && INSTR(STR, STR1)

SELECT LOCATE('ball','football'),
       POSITION('ball'IN 'football'),
       INSTR ('football', 'ball');

6.3.14 REVERSE(S)

SELECT REVERSE('abc');

6.3.15 ELT

ELT(N,STR1,STR2,STR3,...)根据N返回参数字符串

SELECT ELT(3,'1st','2nd','3rd'), ELT(3,'net','os');

6.3.16 FIELD

FIELD(S,S1,S2,...)返回S在参数中的位置

SELECT FIELD('Hi', 'hihi', 'Hey', 'Hi', 'bas') as col1,
       FIELD('Hi', 'Hey', 'Lo', 'Hilo',  'foo') as col2;

6.3.17 FIND_IN_SET

返回子字符串在字符串列表中的位置

SELECT FIND_IN_SET('Hi','hihi,Hey,Hi,bas');

6.3.18 MAKE_SET

根据二进制位选取指定字符串

SELECT  MAKE_SET(1,'a','b','c') as col1,
        MAKE_SET(1 | 4,'hello','nice','world') as col2,
        MAKE_SET(1 | 4,'hello','nice',NULL,'world') as col3,
        MAKE_SET(0,'a','b','c') as col4;

6.4 日期和时间函数

6.4.1 CURDATE && CURRENT_DATE && CURTIME && CURRENT_TIME

SELECT CURDATE(),CURRENT_DATE(), CURDATE() + 0;
SELECT CURTIME(),CURRENT_TIME(), CURTIME() + 0;

-- CURDATE() + 0 将当前日期值转换为数值型

6.4.2 CURRENT_TIMESTAMP && LOCALTIME && NOW && SYSDATE

SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();

6.4.3  UNIX_TIMESTAMP

SELECT UNIX_TIMESTAMP(), UNIX_TIMESTAMP(NOW()), NOW();
SELECT FROM_UNIXTIME('1364098609');

6.4.4 UTC_DATE && UTC_TIME

SELECT UTC_DATE(), UTC_DATE() + 0;
SELECT UTC_TIME(), UTC_TIME() + 0;

6.4.5 

SELECT MONTH('2013-02-13');
SELECT MONTHNAME('2013-02-13');
SELECT DAYNAME('2013-02-13');
SELECT DAYOFWEEK('2011-02-13');
SELECT WEEKDAY('2011-02-13 22:23:00'), WEEKDAY('2011-07-01');
SELECT WEEK('2011-02-20'),WEEK('2011-02-20',0), WEEK('2011-02-20',1);
SELECT WEEK('2011-02-20',3), WEEKOFYEAR('2011-02-20');
SELECT DAYOFYEAR('2011-02-20');
SELECT DAYOFMONTH('2011-02-20');
SELECT YEAR('11-02-03'),YEAR('96-02-03');
SELECT QUARTER('11-04-01');
SELECT MINUTE('11-02-03 10:10:03');
SELECT SECOND('10:05:03');

SELECT EXTRACT(YEAR       FROM '2011-07-02') AS col1,
       EXTRACT(YEAR_MONTH FROM '2011-07-12 01:02:03') AS col2,
       EXTRACT(DAY_MINUTE FROM '2011-07-12 01:02:03') AS col3;

SELECT TIME_TO_SEC('23:23:00');
SELECT SEC_TO_TIME(2345),SEC_TO_TIME(2345)+0,
       TIME_TO_SEC('23:23:00'), SEC_TO_TIME(84180);

SELECT DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 SECOND) AS col1,
       ADDDATE ('2010-12-31 23:59:59', INTERVAL 1 SECOND) AS col2,
       DATE_ADD('2010-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) AS col3;

SELECT DATE_SUB('2011-01-02', INTERVAL 31 DAY) AS col1,
        SUBDATE('2011-01-02', INTERVAL 31 DAY) AS col2,
        DATE_SUB('2011-01-01 00:01:00',INTERVAL '0 0:1:1' DAY_SECOND) AS col3;

SELECT ADDTIME('2000-12-31 23:59:59','1:1:1'), ADDTIME('02:02:02', '02:00:00');
SELECT SUBTIME('2000-12-31 23:59:59','1:1:1'), SUBTIME('02:02:02','02:00:00');

SELECT DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y') AS col1,
        DATE_FORMAT('1997-10-04 22:23:00','%D %y %a %d %m %b %j') AS col2;

SELECT TIME_FORMAT('16:00:00', '%H %k %h %I %l');
SELECT GET_FORMAT (DATE,'EUR'), GET_FORMAT(DATE,'USA');
SELECT DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA') );

6.5 条件判断

IF(EXPR, V1, V2),如果EXPR是true,则IF返回V1,否则返回V2。类似于 三元操作符 exp ? v1 : v2

IFNULL(V1,V2), 如果V1不为NULL返回V1,否则返回V2

CASE EXPR WHEN V1 THEN R1

                     WHEN V2 THEN R2

END

SELECT IF(12,2,3),
       IF(1<2,'yes ','no'),
       IF(STRCMP('test','test1'),'no','yes');

SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(1/0, 'wrong');

SELECT CASE 2 WHEN 1 THEN 'one' 
              WHEN 2 THEN 'two' 
       ELSE 'more' 
       END;

SELECT CASE WHEN 1<0 THEN 'true' 
       ELSE 'false' 
       END;

6.6 系统信息函数

--查看当前MySQL版本号
 SELECT VERSION();

--查看当前用户的连接数
  SELECT CONNECTION_ID();

--输出当前用户的连接信息
 SHOW PROCESSLIST;

--查看当前使用的数据库
 SELECT DATABASE(),SCHEMA();

--获取当前登录用户名称
 SELECT USER(), CURRENT_USER(), SYSTEM_USER();

--返回字符串使用的字符集
 SELECT CHARSET('abc'),
        CHARSET(CONVERT('abc' USING latin1)),
        CHARSET(VERSION());

--返回字符串排列方式
 SELECT COLLATION('abc'),COLLATION(CONVERT('abc' USING utf8));

-- 查看最后一个自动生成的列值
-- 一次插入一条记录
-- 首先创建表worker,其Id字段带有AUTO_INCREMENT约束
 CREATE TABLE worker (Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,Name VARCHAR(30));

 INSERT INTO worker VALUES(NULL, 'jimy');
 INSERT INTO worker VALUES(NULL, 'Tom');
 SELECT * FROM worker;
 SELECT LAST_INSERT_ID();

-- 一次同时插入多条记录
 INSERT INTO worker VALUES(NULL, 'Kevin'),(NULL,'Michal'),(NULL,'Nick');
 SELECT * FROM worker;
 SELECT LAST_INSERT_ID();

6.7 加密/解密

-- 加密密码
 SELECT PASSWORD('newpwd');
 SELECT MD5 ('mypwd');
 SELECT ENCODE('secret','cry'), LENGTH(ENCODE('secret','cry'));

-- 解密密码
 SELECT DECODE(ENCODE('secret','cry'),'cry');

6.8 其他函数

-- 格式化数字,保留小数点位数为指定值
 SELECT FORMAT(12332.123456, 4), FORMAT(12332.1,4), FORMAT(12332.2,0);

-- 不同进制数值之间转换
 SELECT CONV('a',16,2),CONV(15,10,2),CONV(15,10,8),CONV(15,10,16);

-- 字符串网络点地址转换为数值网络地址
 SELECT INET_ATON('209.207.224.40');

-- 数值网络地址转换为字符串网络点地址
 SELECT INET_NTOA(3520061480);

-- 使用加锁、解锁函数
 SELECT GET_LOCK('lock1',10)   AS GetLock,
         IS_USED_LOCK('lock1') AS ISUsedLock,
         IS_FREE_LOCK('lock1') AS ISFreeLock,
         RELEASE_LOCK('lock1') AS ReleaseLock;

-- 重复执行指定函数。
 SELECT PASSWORD ( 'newpwd' );
 SELECT BENCHMARK( 500000, PASSWORD ('newpwd') );

-- 改变字符串的默认字符集
 SELECT CHARSET('string'),  CHARSET(CONVERT('string' USING latin1));

-- 数据类型的转换
 SELECT CAST(100 AS CHAR(2)), CONVERT('2010-10-01 12:12:12',TIME);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhy29563

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值