zoukankan      html  css  js  c++  java
  • MySQL常用的系统函数

    MySQL常用的系统函数

     版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pan_junbiao/article/details/86511477

    MySQL函数是MySQL数据库提供的内置函数。这些内置函数可以帮助用户更加方便地处理表中的数据。MySQL的内置函数可以对表中数据进行相应的处理,以便得到用户希望得到的数据。有了这些内置函数可以使MySQL数据库的功能更加强大。

    1、数学函数

    数学函数是MySQL中常用的一类函数。其主要用于处理数字,包括整型和浮点数等等。

    函数说明
    ABS(X) 返回X的绝对值。
    FLOOR(X) 返回不大于X的最大整数。
    CEIL(X)、CEILING(X) 返回不小于X的最小整数。
    TRUNCATE(X,D) 返回数值X保留到小数点后D位的值,截断时不进行四舍五入。
    ROUND(X) 返回离X最近的整数,截断时要进行四舍五入。
    ROUND(X,D) 保留X小数点后D位的值,截断时要进行四舍五入。
    RAND() 返回0~1的随机数。
    SIGN(X) 返回X的符号(负数,零或正)对应-1,0或1。
    PI() 返回圆周率的值。默认的显示小数位数是7位。
    POW(x,y)、POWER(x,y) 返回x的y次乘方的值。
    SQRT(x) 返回非负数的x的二次方根。
    EXP(x) 返回e的x乘方后的值。
    MOD(N,M) 返回N除以M以后的余数。
    LOG(x) 返回x的自然对数,x相对于基数2的对数。
    LOG10(x) 返回x的基数为10的对数。
    RADIANS(x) 返回x由角度转化为弧度的值。
    DEGREES(x) 返回x由弧度转化为角度的值。
    SIN(x)、ASIN(x) 前者返回x的正弦,其中x为给定的弧度值;后者返回x的反正弦值,x为正弦。
    COS(x)、ACOS(x) 前者返回x的余弦,其中x为给定的弧度值;后者返回x的反余弦值,x为余弦。
    TAN(x)、ATAN(x) 前者返回x的正切,其中x为给定的弧度值;后者返回x的反正切值,x为正切。
    COT(x) 返回给定弧度值x的余切。

    1.1 ABS(X)函数

    返回X的绝对值。

    1.  
      SELECT ABS(8); -- 输出结果:8
    2.  
      SELECT ABS(-8); -- 输出结果:8

    1.2 FLOOR(X)函数

    返回不大于X的最大整数。

    1.  
      SELECT FLOOR(1.3); -- 输出结果:1
    2.  
      SELECT FLOOR(1.8); -- 输出结果:1

    1.3 CEIL(X)、CEILING(X)函数

    返回不小于X的最小整数。

    1.  
      SELECT CEIL(1.3); -- 输出结果:2
    2.  
      SELECT CEILING(1.8); -- 输出结果:2

    1.4 TRUNCATE(X,D)函数

    返回数值X保留到小数点后D位的值,截断时不进行四舍五入。

    SELECT TRUNCATE(1.2328,3); -- 输出结果:1.232 

    1.5 ROUND(X)函数

    返回离X最近的整数,截断时要进行四舍五入。

    1.  
      SELECT ROUND(1.3); -- 输出结果:1
    2.  
      SELECT ROUND(1.8); -- 输出结果:2

    1.6 ROUND(X,D)函数

    保留X小数点后D位的值,截断时要进行四舍五入。

    1.  
      SELECT ROUND(1.2323,3); -- 输出结果:1.232
    2.  
      SELECT ROUND(1.2328,3); -- 输出结果:1.233

    1.7 RAND()函数

    返回0~1的随机数。

    SELECT RAND();  -- 输出结果:0.6198285246452583

    1.8 SIGN(X)函数

    返回X的符号(负数,零或正)对应-1,0或1。

    1.  
      SELECT SIGN(-8); -- 输出结果:-1
    2.  
      SELECT SIGN(0); -- 输出结果:0
    3.  
      SELECT SIGN(8); -- 输出结果:1

    1.9 MOD(N,M)函数

    返回N除以M以后的余数。

    1.  
      SELECT MOD(8,2); -- 输出结果:0
    2.  
      SELECT MOD(9,2); -- 输出结果:1

    2、字符串函数

    字符串函数是MySQL中最常用的一类函数。字符串函数主要用于处理表中的字符串。

    函数说明
    CHAR_LENGTH(str) 计算字符串字符个数。
    LENGTH(str)

    返回值为字符串str的长度,单位为字节。

    CONCAT(s1,s2,...) 返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL。
    CONCAT_WS(x,s1,s2,...) 返回多个字符串拼接之后的字符串,每个字符串之间有一个x。
    INSERT(s1,x,len,s2) 返回字符串s1,其子字符串起始于位置x,被字符串s2取代len个字符。
    LOWER(str)、LCASE(str) 将str中的字母全部转换成小写。
    UPPER(str)、UCASE(str) 将字符串中的字母全部转换成大写。
    LEFT(s,n)、RIGHT(s,n) 前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符。
    LPAD(s1,len,s2)、RPAD(s1,len,s2) 前者返回s1,其左边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符;前者返回s1,其右边由字符串s2填补到len字符长度,假如s1的长度大于len,则返回值被缩短至len字符。
    LTRIM(s)、RTRIM(s) 前者返回字符串s,其左边所有空格被删除;后者返回字符串s,其右边所有空格被删除。
    TRIM(s) 返回字符串s删除了两边空格之后的字符串。
    TRIM(s1 FROM s) 删除字符串s两端所有子字符串s1,未指定s1的情况下则默认删除空格。
    REPEAT(s,n) 返回一个由重复字符串s组成的字符串,字符串s的数目等于n。
    SPACE(n) 返回一个由n个空格组成的字符串。
    REPLACE(s,s1,s2) 返回一个字符串,用字符串s2替代字符串s中所有的字符串s1。
    STRCMP(s1,s2) 若s1和s2中所有的字符串都相同,则返回0;根据当前分类次序,第一个参数小于第二个则返回-1,其他情况返回1。
    SUBSTRING(s,n,len)、MID(s,n,len) 两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串。
    LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) 三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)。
    REVERSE(s) 将字符串s反转。
    ELT(N,str1,str2,str3,str4,...) 返回第N个字符串。
    FIELD(s,s1,s2,...) 返回第一个与字符串s匹配的字符串的位置。
    FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置。
    MAKE_SET(x,s1,s2,...) 按x的二进制数从s1,s2...,sn中选取字符串

    2 CHAR_LENGTH(str)函数

    计算字符串字符个数。

    1.  
      SELECT CHAR_LENGTH('pan_junbiao的博客'); -- 输出结果:14
    2.  
      SELECT CHAR_LENGTH('欢迎访问pan_junbiao的博客'); -- 输出结果:18

    2.2 LENGTH(str)函数

    返回值为字符串str的长度,单位为字节。

    1.  
      SELECT LENGTH('pan_junbiao'); -- 输出结果:11
    2.  
      SELECT LENGTH('阿标'); -- 输出结果:6
    3.  
      SELECT LENGTH('pan_junbiao的博客'); -- 输出结果:20

    2.3 CONCAT(s1,s2,...)函数

    返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个为NULL则返回值为NULL。

    SELECT CONCAT('现在的时间:',NOW());  -- 输出结果:现在的时间:2019-01-17 11:27:58

    2.4 CONCAT_WS(x,s1,s2,...)函数

    返回多个字符串拼接之后的字符串,每个字符串之间有一个x。

    SELECT CONCAT_WS(';','pan_junbiao的博客','KevinPan','pan_junbiao'); -- 输出结果:pan_junbiao的博客;KevinPan;pan_junbiao

    2.5 INSERT(s1,x,len,s2)函数

    返回字符串s1,其子字符串起始于位置x,被字符串s2取代len个字符。

    SELECT INSERT('您好,欢迎访问阿标的博客',8,2,'pan_junbiao');  -- 输出结果:您好,欢迎访问pan_junbiao的博客

    2.6 LEFT(s,n)、RIGHT(s,n)函数

    前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符。

    1.  
      SELECT LEFT('您好,欢迎访问pan_junbiao的博客',7); -- 输出结果:您好,欢迎访问
    2.  
      SELECT RIGHT('您好,欢迎访问pan_junbiao的博客',14); -- 输出结果:pan_junbiao的博客

    2.7 REPLACE(s,s1,s2)函数

    返回一个字符串,用字符串s2替代字符串s中所有的字符串s1。

    SELECT REPLACE('您好,欢迎访问阿标的博客','阿标','pan_junbiao');  -- 输出结果:您好,欢迎访问pan_junbiao的博客

    2.8 SUBSTRING(s,n,len)、MID(s,n,len)函数

    两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串。

    1.  
      SELECT SUBSTRING('您好,欢迎访问pan_junbiao的博客',8,14); -- 输出结果:pan_junbiao的博客
    2.  
      SELECT MID('您好,欢迎访问pan_junbiao的博客',8,14); -- 输出结果:pan_junbiao的博客

    2.9 LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)函数

    三个函数作用相同,返回子字符串str1在字符串str中的开始位置(从第几个字符开始)。

    1.  
      SELECT LOCATE('pan_junbiao','您好,欢迎访问pan_junbiao的博客'); -- 输出结果:8
    2.  
      SELECT POSITION('pan_junbiao' IN '您好,欢迎访问pan_junbiao的博客'); -- 输出结果:8
    3.  
      SELECT INSTR('您好,欢迎访问pan_junbiao的博客','pan_junbiao'); -- 输出结果:8

    2.10 FIELD(s,s1,s2,...)函数

    返回第一个与字符串s匹配的字符串的位置。

    SELECT FIELD('pan_junbiao','pan_junbiao的博客','KevinPan','阿标','pan_junbiao');  -- 输出结果:4

    3、日期和时间函数

    日期和时间函数是MySQL中另一最常用的函数。其主要用于对表中的日期和时间数据的处理。

    函数说明
    CURDATE()、CURRENT_DATE() 返回当前日期,格式:yyyy-MM-dd。
    CURTIME()、CURRENT_TIME() 返回当前时间,格式:HH:mm:ss。
    NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE()、LOCALTIMESTAMP() 返回当前日期和时间,格式:yyyy-MM-dd HH:mm:ss。
    UNIX_TIMESTAMP() 返回一个格林尼治标准时间1970-01-01 00:00:00到现在的秒数。
    UNIX_TIMESTAMP(date) 返回一个格林尼治标准时间1970-01-01 00:00:00到指定时间的秒数。
    FROM_UNIXTIME(date) 和UNIX_TIMESTAMP互为反函数,把UNIX时间戳转换为普通格式的时间。
    UTC_DATE() 返回当前UTC(世界标准时间)日期值,其格式为"YYYY-MM-DD"或"YYYYMMDD"。
    UTC_TIME() 返回当前UTC时间值,其格式为"YYYY-MM-DD"或"YYYYMMDD"。具体使用哪种取决于函数用在字符串还是数字语境中
    MONTH(d) 返回日期d中的月份值,范围是1~12。
    MONTHNAME(d) 返回日期d中的月份名称,如:January、February等。
    DAYNAME(d) 返回日期d是星期几,如:Monday、Tuesday等。
    DAYOFWEEK(d) 返回日期d是星期几,如:1表示星期日,2表示星期一等。
    WEEKDAY(d) 返回日期d是星期几,如:0表示星期一,1表示星期二等。
    WEEK(d) 计算日期d是本年的第几个星期,范围是0~53。
    WEEKOFYEAR(d) 计算日期d是本年的第几个星期,范围是1~53。
    DAYOFYEAR(d) 计算日期d是本年的第几天。
    DAYOFMONTH(d) 计算日期d是本月的第几天。
    YEAR(d) 返回日期d中的年份值。
    QUARTER(d) 返回日期d是第几季度,范围是1~4。
    HOUR(t) 返回时间t中的小时值。
    MINUTE(t) 返回时间t中的分钟值。
    SECOND(t) 返回时间t中的秒钟值。
    EXTRACT(type FROM date) 从日期中提取一部分,type可以是YEAR、YEAR_MONTH、DAY_HOUR、DAY_MICROSECOND、DAY_MINUTE、DAY_SECOND
    TIME_TO_SEC(t) 将时间t转换为秒。
    SEC_TO_TIME(s) 将以秒为单位的时间s转换为时分秒的格式。
    TO_DAYS(d) 计算日期d至0000年1月1日的天数。
    FROM_DAYS(n) 计算从0000年1月1日开始n天后的日期。
    DATEDIFF(d1,d2)

    计算日期d1与d2之间相隔的天数。

    ADDDATE(d,n) 计算起始日期d加上n天的日期。
    ADDDATE(d,INTERVAL expr type) 计算起始日期d加上一个时间段后的日期。
    DATE_ADD(d,INTERVAL expr type) 同ADDDATE(d,INTERVAL expr type)
    SUBDATE(d,n) 计算起始日期d减去n天的日期。
    SUBDATE(d,INTERVAL expr type) 计算起始日期d减去一个时间段后的日期。
    ADDTIME(t,n) 计算起始时间t加上n秒的时间。
    SUBTIME(t,n) 计算起始时间t减去n秒的时间。
    DATE_FORMAT(d,f) 按照表达式 f 的要求显示日期d。
    TIME_FORMAT(t,f) 按照表达式 f 的要求显示时间t。
    GET_FORMAT(type, s) 根据字符串s获取type类型数据的显示格式。

    参数说明:

    type格式:

    SECOND 秒 SECONDS

    MINUTE 分钟 MINUTES

    HOUR 时间 HOURS

    DAY 天 DAYS

    MONTH 月 MONTHS

    YEAR 年 YEARS

    MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"

    HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"

    DAY_HOUR 天和小时 "DAYS HOURS"

    YEAR_MONTH 年和月 "YEARS-MONTHS"

    HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"

    DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"

    DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"

    3.1 CURDATE()、CURRENT_DATE()函数

    返回当前日期,格式:yyyy-MM-dd。

    1.  
      SELECT CURDATE(); -- 输出结果:2019-01-17
    2.  
      SELECT CURRENT_DATE(); -- 输出结果:2019-01-17

    3.2 CURTIME()、CURRENT_TIME()函数

    返回当前时间,格式:HH:mm:ss。

    1.  
      SELECT CURTIME(); -- 输出结果:16:18:28
    2.  
      SELECT CURRENT_TIME(); -- 输出结果:16:18:28

    3.3 NOW()、CURRENT_TIMESTAMP()、LOCALTIME()、SYSDATE()、LOCALTIMESTAMP()函数

    返回当前日期和时间,格式:yyyy-MM-dd HH:mm:ss。

    1.  
      SELECT NOW(); -- 输出结果:2019-01-17 16:28:58
    2.  
      SELECT CURRENT_TIMESTAMP(); -- 输出结果:2019-01-17 16:28:58
    3.  
      SELECT LOCALTIME(); -- 输出结果:2019-01-17 16:28:58
    4.  
      SELECT SYSDATE(); -- 输出结果:2019-01-17 16:28:58
    5.  
      SELECT LOCALTIMESTAMP(); -- 输出结果:2019-01-17 16:28:58

    3.4 DATEDIFF(d1,d2)函数

    计算日期d1与d2之间相隔的天数。

    SELECT DATEDIFF('2019-1-17','2019-1-10');   -- 输出结果:7

    3.5 ADDDATE(d,n)函数

    计算起始日期d加上n天的日期。

    SELECT ADDDATE('2019-1-17',3);   -- 输出结果:2019-01-20

    3.6 ADDDATE(d,INTERVAL expr type)函数

    计算起始日期d加上一个时间段后的日期。

    示例:将日期2019-1-17加上一年两个月后的日期。

    SELECT ADDDATE('2019-1-17',INTERVAL '1 2' YEAR_MONTH);  -- 输出结果:2020-03-17

    3.7 DATE_FORMAT(d,f)函数

    按照表达式 f 的要求显示日期d。

    SELECT DATE_FORMAT(NOW(),'%Y年%m月%d日 %H时%i分%s秒');  -- 输出结果:2019年01月17日 19时18分08秒

    4、条件判断函数

    条件函数用来在SQL语句中进行条件判断。根据不同的条件,执行不同的SQL语句。MySQL支持的条件判断函数及作用。

    函数说明
    IF(expr,v1,v2) 如果表达式expr成立,则执行v1;否则执行v2。
    IFNULL(v1,v2) 如果v1不为空,则显示v1的值;否则显示v2的值。
    CASE WHEN expr1 THEN v1 [WHEN expr2 THEN v2 …][ELSE vn] END case表示函数开始,end表示函数结束。如果表达式expr1成立,则返回v1的值;如果表达式expr2成立,则返回v2的值。依次类推,最后遇到else时,返回vn的值。
    CASE expr WHEN e1 THEN v1 [WHEN e2 THEN v2 …][ELSE vn] END case表示函数开始,end表示函数结束。如果表达式expr取值为e1,则返回v1的值;如果表达式expr取值为e2,则返回v2的值,依次类推,最后遇到else,则返回vn的值。

    4.1 IF()函数

    示例:使用IF语句用来进行条件判断。

    1.  
      SELECT IF(TRUE,'A','B'); -- 输出结果:A
    2.  
      SELECT IF(FALSE,'A','B'); -- 输出结果:B

    4.2 IFNULL()函数

    1.  
      SELECT IFNULL(NULL,'B'); -- 输出结果:B
    2.  
      SELECT IFNULL('pan_junbiao的博客','B'); -- 输出结果:pan_junbiao的博客

    4.2 CASE语句

    示例:使用CASE语句用来进行条件判断。

    1.  
      -- 创建存储过程
    2.  
      CREATE PROCEDURE example_case(IN x INT)
    3.  
      BEGIN
    4.  
      CASE x
    5.  
      WHEN 1 THEN SELECT 1;
    6.  
      WHEN 2 THEN SELECT 2;
    7.  
      ELSE SELECT 3;
    8.  
      END CASE;
    9.  
      END;
    10.  
       
    11.  
      -- 调用存储过程
    12.  
      CALL example_case(5); -- 输出结果:3

    5、系统信息函数

    系统信息函数用来查询MySQL数据库的系统信息。

    函数说明
    VERSION() 获取数据库的版本号。
    CONNECTION_ID() 获取服务器的连接数。
    DATABASE()、SCHEMA() 获取当前数据库名。
    USER()、SYSTEM_USER()、SESSION_USER() 获取当前用户名。
    CURRENT_USER()、CURRENT_USER 获取当前用户名。
    CHARSET(str) 获取字符串str的字符集。
    COLLATION(str) 获取字符串str的字符排序方法。
    LAST_INSERT_ID() 获取最近生成的AUTO_INCREMENT值。

    5.1 获取MySQL版本号、连接数和数据库名

    1.  
      SELECT VERSION(); -- 输出结果:8.0.13
    2.  
      SELECT CONNECTION_ID(); -- 输出结果:160
    3.  
      SELECT DATABASE(); -- 输出结果:db_admin

    5.2 获取当前用户

    SELECT CURRENT_USER();  -- 输出结果:root@localhost

    6、加密函数

    加密函数是MySQL中用来对数据进行加密的函数。因为数据库中有些很敏感的信息不希望被其他人看到,所以就可以通过加密的方式来使这些数据变成看似乱码的数据。

    函数说明
    PASSWORD(str) 对字符串str进行加密。经此函数加密后的数据是不可逆的。其经常用于对普通数据进行加密。
    MD5(str) 对字符串str进行MD5加密。经常用于对普通数据进行加密。
    ENCODE(str,pass_str) 使用字符串pass_str来加密字符串str。加密后的结果是一个二进制数,必须使用BLOB类型的字段来保存它。
    DECODE(crypt_str,pass_str) 使用字符串pass_str来为crypt_str解密。

    7、其他函数

    MySQL中除了上述内置函数以外,还包含很多函数。例如,数字格式化函数FORMAT(x,n),IP地址与数字的转换函数INET_ATON(ip),还有加锁函数GET_LOCT(name,time)、解锁函数RELEASE_LOCK(name)等等。

    函数说明
    FORMAT(X,D) 将数字X格式化,将X保留到小数点后D位,截断时要进行四舍五入。
    CONV(N,from_base,to_base) 不同进制数之间的转换,返回值为数值N的字符串表示,由from_base进制转换为to_base进制。
    INET_ATON(expr) 给出一个作为字符串的网络地址的点地址表示,返回一个代表该地址数值的整数,地址可以使4或8比特。
    INET_NTOA(expr) 给定一个数字网络地址(4或8比特),返回作为字符串的该地址的点地址表示。
    BENCHMARK(count,expr) 重复执行count次表达式expr,它可以用于计算MySQL处理表达式的速度,结果值通常是0(0只是表示很快,并不是没有速度)。另一个作用是用它在MySQL客户端内部报告语句执行的时间。
    CONVERT(str USING charset) 使用字符集charset表示字符串str。

    7.1 FORMAT(X,D)函数

    将数字X格式化,将X保留到小数点后D位,截断时要进行四舍五入。

    1.  
      SELECT FORMAT(1.2323,3); -- 输出结果:1.232
    2.  
      SELECT FORMAT(1.2328,3); -- 输出结果:1.233
  • 相关阅读:
    CAN器件
    团队赋能
    电子模拟开关
    名言出处
    危机管理
    隔离技术
    让CSS布局更加直观:box-sizing
    浅谈跨域以WebService对跨域的支持
    给初学者的20个CSS实用建议
    JS中eval处理JSON数据 为什么要加括号
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/11049975.html
Copyright © 2011-2022 走看看