MySQL:函数

函数

一、数学函数

1、绝对值函数ABS(x):

x为插入的数据,返回绝对值

2、返回圆周率函数PI():

无需插入数据,返回圆周率的值,默认为小数点后6位

3、平方根函数SQRT(x):

返回非负数的二次根

4、求余函数MOD(x,y):

返回x被y除后的余数,对小数点也有作用,返回除数运算后的精确除数

5、获取整数函数GEIL(x)、GEILING(x)、FLOOR(x):

(1)GEIL(x)和GEILING(x)意义相同,返回不小于x的最小整数值,返回值是一个bigint类型。
(2)FLOOR(x)返回不大于x的最大整数值,返回值是一个bigint类型

6、获取随机数函数RAND():无需加入数据,随机产生0到1之间的浮点值([0,1.0])

注意:当输入数据x时,x相同时,产生的随机数相同
实例:

无数据x
mysql> select rand(),rand();
+--------------------+---------------------+
| rand()             | rand()              |
+--------------------+---------------------+
| 0.6126245340449964 | 0.16587338705162832 |
+--------------------+---------------------+
有数据x
mysql> select rand(),rand(1),rand(1),rand(2);
+--------------------+---------------------+---------------------+--------------------+
| rand()             | rand(1)             | rand(1)             | rand(2)            |
+--------------------+---------------------+---------------------+--------------------+
| 0.4598466888627472 | 0.40540353712197724 | 0.40540353712197724 | 0.6555866465490187 |
+--------------------+---------------------+---------------------+--------------------+

7、四舍五入函数ROUND(x)、ROUND(x,y)、TRUNCATE(x,y):

(1)ROUND(x):对x值进行四舍五入。
(2)ROUND(x,y):
1)y大于0,进行四舍五入,其值保留到小数点后面的y位。
2)y小于0,则保留x到小数点左边y位,并且保留到小数点左边的相应位数直接保存位0,不进行四舍五入。
实例

mysql> select round(1.38,1),round(1.38,0),round(211.38,-1),round(211.38,-2),round(1.38,-2);
+---------------+---------------+------------------+------------------+----------------+
| round(1.38,1) | round(1.38,0) | round(211.38,-1) | round(211.38,-2) | round(1.38,-2) |
+---------------+---------------+------------------+------------------+----------------+
|           1.4 |             1 |              210 |              200 |              0 |
+---------------+---------------+------------------+------------------+----------------+

(3)TRUNCATE(x,y):
1)返回被舍弃至小数点后y位的数字x。
2)若y的值为0,则结果不带有小数部分。
3)若y是负数,则截去(归零)x小数点左起第y位开始后面所有低位的值
实例

mysql> select truncate(1.31,1),truncate(1.31,0),truncate(12.31,-1);
+------------------+------------------+--------------------+
| truncate(1.31,1) | truncate(1.31,0) | truncate(12.31,-1) |
+------------------+------------------+--------------------+
|              1.3 |                1 |                 10 |
+------------------+------------------+--------------------+

注意:round(x,y)和truncate(x,y)的区别
round(x,y)取值时会进行四舍五入;
Truncate(x,y)取值时是直接四舍五入。

8、符号函数SIGN(x):x为负时返回-1,x为零时返回0,x为正时返回1。

9、幂函数POW(x,y)、POWER(x,y)、EXP(x):

1)POW(x,y)和POWER(x,y):返回x的y次乘方的结果值
2)EXP(x):返回e的x乘方后的值

10、对数函数LOG(x)、LOG10(x):

1)LOG(x):返回x的自然对数,x相对于基数e的对数
2)LOG10(x):返回x的基数为10的对数

11、角度与弧度转化函RADIANS(x)、DEGREES(x):

1)RADIANS(x):将参数x由角度转化为弧度
2)DEGREES(x):将参数x由弧度转为角度

12、正弦函数SIN(x):返回x的正弦,其中x为弧度值

13、反正弦函数ASIN(x):返回x的反正弦,即正弦x的值,若x不在-1到1之间,则返回null。
14、余数函数COS(x):返回x的余弦,其中x为弧度值
15、反余数函数ACOS(x):返回x的反余弦,即余弦x的值,若x不在-1到1之间,则返回null。
16、正切函数TAN(x):返回x的正切,其中x为弧度值
17、反正切函数ATAN(x):返回x的反切弦,即正切x的值,
18、余切函数COT(x):返回x的余切

二、字符串函数

1、计算字符串中的字符个数CHAR_LENGTH(‘str’):

作用:返回字符串str的字符个数;
注意:一个多字节字符算作一个单字符。
实例

mysql> select char_length('运'),char_length('yun'),char_length('123');
+-------------------+--------------------+--------------------+
| char_length('运') | char_length('yun') | char_length('123') |
+-------------------+--------------------+--------------------+
|                 1 |                  3 |                  3 |
+-------------------+--------------------+--------------------+

2、计算字符串中的字节长度LENGTH(‘str’):

作用:返回字符串的字节长度;
注意:使用utf8编码字符级时,一个汉字是3个字节,一个数字或字母算一个字节。
实例

mysql> select length('运'),length('yun'),length('123');
+--------------+---------------+---------------+
| length('运') | length('yun') | length('123') |
+--------------+---------------+---------------+
|            2 |             3 |             3 |
+--------------+---------------+---------------+

3、合并字符串函数CONCAT(‘s1’,’s2’…):CONCAT_WS(‘x’,’s1’,’s2’):

 (1)CONCAT(‘s1’,’s2’…):
作用:返回结果为一个或多个字符串连接产生新的字符串。
注意:
  1)如果任何一个原字符串为空值,则返回空值;
  2)如果任何一个原字符串为二进制,则返回二进制;
  3)如果任何一个原字符串为非二进制,则返回非二进制;
实例

mysql> select concat('my','sql'),concat('null','sql'),concat(null,'null');
+--------------------+----------------------+---------------------+
| concat('my','sql') | concat('null','sql') | concat(null,'null') |
+--------------------+----------------------+---------------------+
| mysql              | nullsql              | NULL                |
+--------------------+----------------------+---------------------+

(2)CONCAT_WS(‘x’,’s1’,’s2’):
   注意:
     1)x为分隔符,其位置在要连接的字符串之间;
     2)分隔符可以是字符串,也可以是其他符号;
     3)如果分隔符是空值,则返回空值;
     4)函数任何分隔符的原字符串后如果是的空值则返回空值。
实例

 mysql> select concat_ws('*','my','sql'),concat_ws('null','my','sql'),concat('*','m',null,'y');
+---------------------------+------------------------------+--------------------------+
| concat_ws('*','my','sql') | concat_ws('null','my','sql') | concat('*','m',null,'y') |
+---------------------------+------------------------------+--------------------------+
| my*sql                    | mynullsql                    | NULL                     |
+---------------------------+------------------------------+--------------------------+

4、替换字符串函数INSERT(原字符串,开始位置,替换长度,用来替换的字符串):

注意:
1)如果开始位置大于原字符串的位置或者小于等于0,则返回原字符串;
2)如果替换字符串超过原字符串长度,则替换x后面的所有字符串;
3)四个参数有一个是空值,则都是空值。
4)看例题,描述不出来。
实例

mysql> select insert('qwert',2,1,'asdf'),insert('qwert',2,10,'asdf'),insert('qwert',null,2,'asdf');
+----------------------------+-----------------------------+-------------------------------+
| insert('qwert',2,1,'asdf') | insert('qwert',2,10,'asdf') | insert('qwert',null,2,'asdf') |
+----------------------------+-----------------------------+-------------------------------+
| qasdfert                   | qasdf                       | NULL                          |
+----------------------------+-----------------------------+-------------------------------+

5、字母大小写转换函数

1)转小写:LOWER(‘str’)和LCASE(‘str’):
2)转大写:UPPER(‘str’)和UCASE(‘str’):

6、获取指定长度的字符串的函数

1)LEFT(‘str’,n):返回字符串str开始最左边n个字符;
2)RIGHT(‘str’,n):返回字符串str开始最右边n个字符;

7、填充字符串的函数

(1)LPAD(str1,len,str2):
    1)作用:返回str1,其左边由字符串str2填补到len字符长度。
    2)注意:假如str1的长度大于len,则返回值被缩短到len字符。
(2)RPAD(str1,len,str2):
    1)作用:返回str1,其右边由字符串str2填补到len字符长度。
    2)注意:假如str1的长度大于len,则返回值被缩短到len字符。

8、删除空格的函数LTRIM():RTRIM():TRIM():

    LTRIM(str):字符串str只有左侧空格字符被删除
    RTRIM(str):字符串str只有右侧空格字符被删除
    TRIM(str):字符串str两侧空格字符被删除

9、删除指定字符串的函数TRIM( str1 FROM str):

作用:删除字符串str中两端所有的子字符串str1.str1为可选项,在未指定情况下删除空格。

10、重复生成字符串的函数REPEAT(str,n):

作用:返回一个由重复的字符串str组成的字符串,字符串str的数目等于n。若n<=0,则返回一个空字符串。若str或n为null,则返回null。

11、空格函数SPACE(n):

作用:返回一个由n个空格组成的字符串。
【例】为便于显示使用concat()函数;

mysql> select concat('(',space(3),')');
+--------------------------+
| concat('(',space(3),')') |
+--------------------------+
| (   )                    |
+--------------------------+

12、替换函数REPLACE(str,str1,str2):

作用:使用字符串str2替换字符串str中的所有字符串str1;

13、比较字符串大小的函数STRCMP(str1,str2):

作用:str1与str2结果相同返回0;str1小于str2,返回-1;其他结果返回1;

14、获取子字符串函数SUBSTRING(s,n,长度len):MID(s,n,长度len):

作用:两者的作用差不多;
如果len为正数,则从字符串str开始方向的起始位置n返回一个长度为len的字符;
如果len为负数,则从字符串str结束方向的起始位置n返回一个长度为len的字符;
实例

mysql> select substring('hahayixiaorenshengrumeng',5,3),
    -> substring('hahayixiaorenshengrumeng',-5,3);
+-------------------------------------------+--------------------------------------------+
| substring('hahayixiaorenshengrumeng',5,3) | substring('hahayixiaorenshengrumeng',-5,3) |
+-------------------------------------------+--------------------------------------------+
| yix                                       | ume                                        |
+-------------------------------------------+--------------------------------------------+

注意:如果len为小于1 的数放回空值;

15、匹配字符串开始位置的函数LOCATE(str1,str),POSITION(str in str),INSTR(str,str1):

作用:三者的作用差不多;返回字符串str1在字符串str的位置

16、字符串逆序的函数REVERSE(str):

作用:将字符串str反转输出。

17、返回指定位置的字符串函数ELT(N,str1,str2,str3,str4……):

作用:若N=1,则返回字符串1;
若N=2,则返回字符串2;
如果N<1或者N>字符串的个数,则返回值时空值。

18、返回指定字符串位置的函数FIELD(str,str1,str2,str3,str4……):

作用:返回字符串str在列表中第一次出现的位置,
      找不到返回0
      Str为空值返回0,原因是空值不能和任何值进行比较;
实例

mysql> select field('ha','haa','aha','ha'),
    -> field('hhaa','haa','aha','ha'),
    -> field('','haa','aha','ha');
+------------------------------+--------------------------------+----------------------------+
| field('ha','haa','aha','ha') | field('hhaa','haa','aha','ha') | field('','haa','aha','ha') |
+------------------------------+--------------------------------+----------------------------+
|                            3 |                              0 |                          0 |
+------------------------------+--------------------------------+----------------------------+

19、返回字符串的位置FIND_IN_SET(str,str1):

作用:返回字符串str在列表中第一次出现的位置,str1为由‘,’组成的列表;
      找不到返回0
      Str为空值返回0,原因是空值不能和任何值进行比较;
      如果str1开始有‘,’则报错;
实例

mysql> select find_in_set('ha','haa,aha,ha'),
    -> find_in_set('hhaa','haa,aha,ha'),
    -> find_in_set('','haa,aha,ha');
+--------------------------------+----------------------------------+------------------------------+
| find_in_set('ha','haa,aha,ha') | find_in_set('hhaa','haa,aha,ha') | find_in_set('','haa,aha,ha') |
+--------------------------------+----------------------------------+------------------------------+
|                              3 |                                0 |                            0 |
+--------------------------------+----------------------------------+------------------------------+

20、选取字符串的函数MAKE_SET(bite,str1,str2……):

作用:返回一个设定值(含子字符串分隔字符串","字符),在设置位的相应位的字符串。str1对应于位0,str2到第1位,依此类推。在str1,str1有NULL值,...那么不添加到结果。
实例

mysql> SELECT MAKE_SET(1,'a','b','c') as a,
    -> MAKE_SET(1 | 4,'hello','nice','world') as b,
    -> MAKE_SET(1 | 4,'hello','nice',NULL,'world') as c,
    -> MAKE_SET(0,'a','b','c') as d;
+---+-------------+-------+---+
| a | b           | c     | d |
+---+-------------+-------+---+
| a | hello,world | hello |   |
+---+-------------+-------+---+

 解释:
SELECT MAKE_SET(1 | 4,'hello','nice','world');
1|4是 1和4“或运算”,得0101,将这个二进数倒过来写,从左到右,由低位到高位写,为1010。
对应字符串排列为
hello,nice,world,对应着从低位到高位的1,2,4(只有3位),取出1对应的字符串
所以,1(hello)0(nice)1(world)0,对应hello,word

三、日期和时间函数

1、获取当前日期的函数

语法:select CURDATE()CURRENT_DATE()utc_date();
注意:返回的日期格式为’YYYY-MM-DD’

2、获取当前时间的函数

语法:select CURTIME()CURRENT_TIME()utc_time();
注意:返回的时间格式为’HH:MM:SS’

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

语法:select CURRENT_TIMESTAMP()LOCALTIME()NOW()SYSDATE():
注意:返回格式:’YYYY-MM-DD HH:MM:SS’

4、UNIX时间戳函数

获取月份的函数
date的格式为YYYY-MM-DD或者YY-MM-DD
语法:select MONTH(‘date’):返回阿拉伯数字月份
语法:select MONTHHAME(‘date’):返回英文月份

5、获取星期的函数

语法:select DAYNAME(‘date’):返回英文的星期
语法:select DAYOFWEEK(‘date’):返回阿拉伯数字(1是周日,2是周一,……,7是周六)
语法:select WEEKDAY(‘date’):返回阿拉伯数字(0是周一,1是周一……,6是周六)

6、获取星期数的函数

语法:select WEEK(‘date’,Mode);
语法:select WEEKOFYEAR(‘date’,Mode);
Week函数中Mode参数取值
Mode 一周的第一天 范围
0或4 周日 0~53
1或5 周日 0~53
2或6 周日 1~53
3或7 周日 1~53

7、获取天数的函数

语法:select DAYOFYEAR(‘date’):返回date一年中的第几天,范围是1~366。
语法:select DAYOFMONTH(‘date’):返回date一个月中第几天,范围是1~31。

8、获取年份、季度、小时、分钟和秒钟的函数

 ①获取年份
  语法:select YEAR(‘date’)返回相应的年份,‘00~69’返回‘2000~2069’;‘70~99’返回‘1970~1999’
 ②获取季度
  语法:select QUARTER(‘date’)返回相应的季度,返回值在1~4
 ③获取小时
  语法:select HOUR(‘date’),返回值在0~59.
 ④获取分钟
  语法:select MINUTE(‘date’),返回值在0~59.
 ⑤获取秒值
  语法:select SECOND(‘date’),返回值在0~59.

9、截取日期的指定值的函数

语法:EXTRACT(type FROM ‘date’)
type:year截取年份                              type:month截取月份
type:day截取天数                     type:year_month截取年份和月份                type:day_hour截取小时                         type:day_minute截取分钟
type:day_second截取秒数                       type:hour_minute截取小时和分钟
type:minute_second截取分秒                    type:hour_second截取时分秒

10、时间和秒钟转化的函数

 时间转秒数
 语法:select time_to_sec(‘date’):
 秒数转时间:select sec_to_time(int);

11、计算日期和时间的函数

type:指定从起始日期添加或减去的时间间隔
日期加运算:date_add(date,interval 

12、日期和时间格式化函数Date_Format(date,format)

四、条件判断函数

1、IF函数
2、CASE函数

五、加密函数

1、加密函数PASSWORD(str)
2、加密函数MD5(str)
3、加密函数ENCODE(str,pswd_str)
4、解密函数DECODE(crypt_str,pswd_str)

六、系统信息函数

1、获取MySQL版本号;
语法:select version();
2、获取MySQL连接数
语法:
3、获取MySQL数据库名
4、获取用户名函数
5、获取字符串的字符集合和排序方式的函数
6、获取最后一个自动生成的ID值的函数
 (1)一次插入一条记录
 (2)一次插入多个记录

七、其他函数

1、格式化函数FORMAT(x,n)

FORMAT(x,n)将数字x格式化,并以四舍五入的方式保留小数点后n位,结果以字符串形式返回。
若n为零或负数,则返回结果函数不含小数部分。
【例】

mysql> select format(2.34443,2),format(2.3432,0),format(2342.3432,-2);
+-------------------+------------------+----------------------+
| format(2.34443,2) | format(2.3432,0) | format(2342.3432,-2) |
+-------------------+------------------+----------------------+
| 2.34              | 2                | 2,342                |
+-------------------+------------------+----------------------+

2、不同进制的数字进行转换的函数CONV(N,原进制,显示进制)

返回值为数值型的字符串表示,三个参数有一个为null,则返回值为null
最小基数为2,最大基数为36;
【例】

mysql> select conv('a',16,2),conv('10',10,2);
+----------------+-----------------+
| conv('a',16,2) | conv('10',10,2) |
+----------------+-----------------+
| 1010           | 1010            |
+----------------+-----------------+

3、IP地址与数字相互转换的函数INET_ATON(expr),INET_NTOA(expr)

INET_ATON(expr):将一个字符串的网络地址的点地址转化为一个代表该地址(4或8比特)数值的整数。 INET_NTOA(expr):将一个地址(4或8比特)数值的整数转换为一个字符串的网络地址的点地址;
【例】

INET_ATON(expr):
mysql> select INET_ATON('211.52.175.185');
+-----------------------------+
| INET_ATON('211.52.175.185') |
+-----------------------------+
|                  3543445433 |
+-----------------------------+
INET_NTOA(expr):
mysql> select INET_NTOA(3543445433);
+-----------------------+
| INET_NTOA(3543445433) |
+-----------------------+
| 211.52.175.185        |
+-----------------------+

注意:两者的计算方式
211*(256^3)+52*(256^2)+175*(256^1)+185=3543445433;
4、加锁函数和解锁函数
5、重复执行指定操作的函数
6、改变字符集的函数
7、改变数据类型的函数

原文地址:https://www.cnblogs.com/hahayixiao/p/10252023.html