MySQL常用函数-数学函数与字符串函数

一、数学函数

1、绝对值函数

abs(x)   返回x的绝对值

1 select abs(2),abs(-3.3),abs(-33),abs(null)

 

2、圆周率函数

PI()  返回圆周率π的值,默认显示小数位数是6位

select pi();

 

3、平方根函数

sqrt(x)  返回非负数x的二次方根

select sqrt(9),sqrt(40),sqrt(-49),sqrt(null);

 

4、求余函数

mod(x,y)  返回x被y除后的余数,对于带有小数部分的数值也起作用,返回触发运算后的精确余数

1 select mod(31,8),mod(-234,10),mod(45.5,6),mod(null,2),mod(2,null),mod(null,null);

 

5、取整函数

①ceil(x)、ceiling(x)  返回不小于x的最小整数,返回值类型为bigint

1 select ceil(-3.35),ceil(-3),ceil(0),ceil(3),ceil(3.35),ceiling(-3.35),ceiling(-3),ceiling(0),ceiling(3),ceiling(3.35),ceil(null),ceiling(null);

 

②floor(x)  返回不大于x的最大整数,返回值类型为bigint

1 select floor(-3.35),floor(-3),floor(0),floor(3),floor(3.35),floor(null);

 

6、随机数函数

rand(x)  返回一个随机浮点数,结果在[0,1.0]之间。如果rand()不带参数则每次产生的随机数值是不同的,如果rand(x)带参数时,参数相同将产生相同的随机数,不同的参数产生的随机数值不同

1 select rand(),rand(),rand(),rand(10),rand(10),rand(11),rand(null);

 

7、截取函数

①round(x)  返回最接近于参数x的整数,对x进行四舍五入

1 select round(-1.14),round(-1.67),round(1,14),round(1.66),round(-1),round(1),round(0),round(null);

 

 ②round(x,y)  返回最接近参数x的,如果y为0,则与round()相同;如果y为正整数,则其值保留到小数点后面y位;如果y为负整数,则其值保留到小数点左边y位,并且保留的小数点左边的相应位数直接保存为0,不进行四舍五入

1 select round(1.38,1),round(1.38,0),round(232.38,-1),round(232.38,-2),round(236.38,-1),round(null,1),round(1.2,null),round(null,null);

 

 ③truncate(x,y)  返回被舍去至小数点后y位的数字x,如果y为0,则结果舍去小数点及小数点后小数部分,如果y为负整数,则截去x小数点左起第y位开始后面所有低位的值

1 select truncate(1.38,1),truncate(1.38,0),truncate(232.38,-1),truncate(232.38,-2),truncate(236.38,-1),truncate(null,1),truncate(1.2,null),truncate(null,null);

  注意:round(x,y)函数在截取值的时候会四舍五入,而truncate(x,y)直接截取值,并不进行四舍五入。

 

8、符号函数

sign(x)  返回参数的符号,x的值为负、0、正时结果依次为-1、0、1

1 select sign(-2.1),sign(0),sign(2),sign(null);

 

 

 

9、幂运算函数

①pow(x,y)、power(x,y)  结果相同,返回x的y次乘方的结果值

1 select pow(2,2),power(2,2),pow(2,-2),power(2,-2),pow(null,2),power(2,null),pow(null,null);

 

 

 ②exp(x)  返回e的x乘方的结果值

1 select exp(2),exp(-2),exp(0),exp(null);

 

 

 

10、对数运算函数

①log(x)  返回x的自然对数,即x相对于基数e的对数

②log10(x)  返回x相对于基数10的对数

1 select log(3),log(-3),log(null),log10(2),log10(100),log10(-1000),log10(null),log(0);

 

 

 注意:对数定义域必须为正数

 

11、角度与弧度相互转换函数

①radians(x)  将参数x由角度转为弧度

②degrees(x)  将参数x由弧度转为角度

1 select radians(90),radians(180),pi(),degrees(pi()),degrees(pi()/2);

 

 

 

12、正玄函数和反正玄函数

①sin(x)  返回x的正玄,其中x为弧度值

②asin(x)  返回x的反正玄,即正玄为x的值。若x不在-1和1的范围之内,则返回null

1 select sin(radians(0)),sin(radians(90)),sin(radians(-90)),asin(-1),asin(0),asin(-1),degrees(asin(-1)),degrees(asin(0)),degrees(asin(1));

 

 

 注意:asin和sin互为反函数。

13、余玄函数和反余玄函数

①cos(x)  返回x的余玄,其中x为弧度值

②acos(x)  返回x的反余玄,即余玄是x的值。若x不在-1和1的范围之内,则返回NULL

1 select cos(radians(0)),cos(pi()),cos(pi()/2),cos(radians(90)),cos(radians(180)),degrees(acos(-1)),degrees(acos(0)),degrees(acos(1)),acos(2);

 

 

 注意:acos和cos互为反函数。

14、正切函数、反正切函数、余切函数

①tan(x)  返回x的正切,其中x为给定的弧度值

②atan(x)  返回x的反正切,即正切为x的值

③cot(x)  返回x的余切

1 select tan(radians(-90)),tan(radians(-45)),tan(radians(0)),tan(radians(45)),tan(radians(90)),degrees(atan(-1)),degrees(atan(0)),degrees(atan(1));

 

 

1 select cot(radians(0.1)),cot(radians(45)),cot(radians(90)),cot(radians(135)),cot(radians(180));

 

 

二、字符串函数

1、字符串字符数、字符串长度

①char_length(str)  返回字符串str的字符数,一个多字节字符算作一个字符。

②length(str)  返回字符串str的字节数,使用utf8编码字符集时,一个汉字是3个字节,一个数字或字母是1个字节

1 select char_length('date'),char_length('101'),char_length('中国'),char_length(null),char_length(''),length('date'),length('101'),length('中国'),length(null),length('');

 

 2、拼接字符串

①concat(s1,s2,...)  返回结果为连接参数产生的字符串。如果有任何一个参数为NULL,则返回值为NULL。如果所有参数均为非二进制字符串,则返回值为非二进制字符串。如果有任何一个参数为二进制字符串,则返回值为二进制字符串

1 select concat('My SQL','8.0'),concat('My',NULL,'SQL');

 

 ②concat_ws(x,s1,s2,...)  第一个参数x是其它参数的分隔符,分隔符的位置放在要连接的两个字符串之间,分隔符可以是一个字符串,也可以是其他参数。如果分隔符是NULL,则结果为NULL。函数会忽略任何分隔符参数后的NULL值

1 select concat_ws('-','1st','2st','3st'),concat_ws('*','1st','null','3st'),concat_ws('*','1st',null,'3st'),concat_ws(null,'1st','2st','3st');

 

 3、替换字符串

insert(s1,x,len,s2)  s1表示原字符串,x表示字符串s1的位置(从1开始),len表示需替换的长度,即从x开始的len长度(包含x对应的字符),s2表示替换的字符串,最终返回替换后的字符串。

如果x超过字符串s1的长度,则返回值为原字符串s1。

如果替换长度len超出了原字符串s1的长度,则从x位置开始,截取后面所有的字符,并替换为指定的字符串s2。

如果人一个参数为NULL,则返回值为NULL。

1 select insert('Quest',2,4,'What'),insert('Quest',-1,4,'What'),insert('Quest',3,100,'What'),insert('Quest',3,100,null);

 4、字母大小写转换

①lower(str)、lcase(str)  将字符串str中的字母字符全部替换成小写字母

②upper(str)、ucase(str)  将字符串str中的字母字符全部替换成大写字母

1 select lower('This is 红太阳'),lcase('This is 苹果'),upper('This is 红太阳'),ucase('This is 红太阳');

 

 5、获取指定长度的字符串

①left(str,n)  返回字符串str最左边n个字符

②right(str,n)  返回字符串str最右边n个字符

1 select left('football',5),right('football',4),left('football',8),right('football',8),left('football',-1),right('football',-1),isnull(right('football',-1)),right('football',-1)='';

 

 注意:如果n大于字符串的长度,则返回原字符串,如果n为负数,则返回空字符串'('),而不是null。

6、填充字符串

①lpad(s1,len,s2)  s1表示原字符串,len表示结果字符串总长度,s2表示填充的字符串,即,在s1左边被s2填补到len字符长度,如果s1的长度大于len,则返回值被压缩至len字符

②rpad(s1,len,s2)  s1表示原字符串,len表示结果字符串总长度,s2表示填充的字符串,即,在s1右边被s2填补到len字符长度,如果s1的长度大于len,则返回值被压缩至len字符

1 select lpad('hello',4,'?'),lpad('hello',10,'?'),lpad('中国',4,'*'),rpad('hello',4,'?'),rpad('hello',10,'?'),rpad('中国',4,'*'),lpad('中国',-1,'*'),rpad('中国',-1,'*'),lpad('中国',-1,'*') is null,lpad('中国',-1,'*')='';

 

 注意:如果s1的长度大于len,则返回值为s1被压缩到len长度;如果len为负数,则返回值为null,并不是空字符串。

7、删除空格

①ltrim(str)  返回值为删除字符串str左侧空格后的字符串,不会删除str右侧的空格

②rtrim(str)  返回值为删除字符串str右侧空格后的字符串,不会删除str左侧的空格

③trim(str)  返回值为删除字符串str两侧空格后的字符串

1 select '(  book  )',concat('(',ltrim('  book  '),')'),concat('(',rtrim('  book  '),')'),concat('(',trim('  book  '),')');

 

 8、删除指定字符串

trim(s1 from str)  删除字符串str中两端所有的子字符串s1,s1为可选项,在未指定的情况下,删除空格

1 select trim('xy' from 'xyxboxyokxxyxy');

 

 注意:不存在ltrim(s1 from str)、rtrim(s1 from str)

9、重复生成字符串

repeat(str,n)  返回一个由重复的字符串str组成的字符串,重复的次数等于n。若n小于等于0,则返回一个空字符串。若s或n为null,则返回null

1 select repeat('mysql',3),repeat('mysql',0),repeat('mysql',-1),repeat('mysql',0)='',repeat('mysql',0) is null,repeat('mysql',null),repeat(null,3);

 

 10、空格函数

space(n)  返回一个由n个空格组成的字符串

1 select concat('(',space(6),')'),length(space(6));

 

 11、替换函数

replace(s,s1,s2)  使用字符串s2替换字符串s中所有的字符串s1。若s1或s2为null,则返回值也为null。

1 select replace('xxx.mysql.com','x','w'),replace('xxx.mysql.com','t','w'),replace('xxx.mysql.com',null,'w'),replace('xxx.mysql.com','x',null);

 

 12、比较字符串大小

strcmp(s1,s2)  若s1与s2相同,则返回0,根据当前次序,第一个参数s1小于第二个参数s2,则返回-1,第一个参数s1大于第二个参数s2,则返回1。如果有至少一个参数为null,则结果为null。

1 select strcmp('txt','txt2'),strcmp('txt2','txt'),strcmp('txt','txt'),strcmp(null,'txt2'),strcmp('txt',null),strcmp(null,null);

 

 13、获取子串

①substring(str,n,len)  如果带有参数len,则从字符串str返回一个长度为len的子字符串,起始于位置n,如果没有参数len,则返回起始于位置n后的整个子串。如果n为负值,则子字符串的位置起始于字符串str结尾的n字符,即倒数第n个字符,而不是字符串str的开头位置

②mid(str,n,len)  作用与substring相同

1 select substring('breakfast',5),substring('breakfast',5,3),substring('breakfast',-3),substring('breakfast',-5,3),substring('breakfast',0),substring('breakfast',0)='',substring('breakfast',5,0),substring('breakfast',5,0)='';

 

 注意:如果len小于1,则结果始终为空字符串;n的值为0,则结果为空字符串,即开始位置为1。

14、匹配子串开始位置

locate(str1,str)、position(str1 in str)、instr(str,str1)  作用相同,返回子字符串str1在字符串str中的开始位置

1 select locate('ball','football'),position('ball' in 'football'),instr('football','ball'),locate('ab','football'),position('ab' in 'football'),instr('football','ab'),locate('ball',null),locate(null,'football');

 

 注意:如果子字符串str1在str中不存在,则返回0;如果str或str1为null,则返回值为null。

15、字符串逆序

reverse(str)  将字符串str反转

1 select reverse('abc'),reverse(null)

 

 16、返回列表中指定位置的字符串

elt(n,字符串1,字符串2,字符串3,...,字符串n)  若n=1,则返回字符串1;若n=2,则返回字符串2;若n=n,则返回字符串n;若n小于1或者n大于参数中字符串的数目,则返回null

1 select elt(1,'1st','2nd','3rd'),elt(3,'net','os'),elt(0,'a','b');

 

 17、返回指定字符串在列表中的位置

field(s,str1,str2,...,strn)  返回字符串s在列表str1,str2,...,strn中第一次出现的位置,从1开始;在找不到s的情况下返回0;如果s为null,则返回0,因为null不能同任何值进行同等比较

1 select field('Hi','hihi','hi','hey','Hi','bye'),field('Hii','hihi','hi','hey','Hi','bye'),field(null,'hihi','hi','hey','Hi','bye');

 

 注意:不区分大小写。

18、返回指定字符串在列表中的位置

find_in_set(s1,s2)  返回字符串s1在字符串列表s2中出现的位置,字符串列表是一个由多个逗号','分割的字符串组成的列表。如果s1不在s2中或s2为空字符串,则返回值为0。如果任意一个参数为null,则返回值为null。如果第一个参数s1包含一个逗号',',则无法正常运行。

1 select find_in_set('Hi','hihi,hi,hey,Hi,bye'),find_in_set('Hii','hihi,hi,hey,Hi,bye'),find_in_set(null,'hihi,hi,hey,Hi,bye'),find_in_set('Hii',null),find_in_set('a,b','d,a,b,c');

 

 19、从字符串列表中选择字符串

make_set(x,s1,s2,...,sn)  按x的二进制数从s1,s2,...,sn中选取字符串。例如5的二进制是0101,这个二进制从右往左的第1位和第3位是1,则选取s1,s3。 其中s1,s2,...,sn中的null不会被添加到结果中。

1 select make_set(1,'a','b','c'),make_set(1 | 4,'hello','nice','world'),make_set(1 | 4,'hello','nice',null,'world'),make_set(0,'hello','nice','world'),make_set(0,'hello','nice','world') is null,make_set(0,'hello','nice','world')='';

 

posted @ 2021-05-28 16:15  maybe兔  阅读(280)  评论(0)    收藏  举报