• MySQL笔记-07 常用函数


    MySQL数据库中提供了很丰富的函数。MySQL函数包括数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数、加密函数、格式化函数等。函数的执行速度非常快,可以提高MySQL的处理速度,简化用户的操作。本章将详细介绍MySQL函数的相关知识

    MySQL函数是MySQL数据库提供的内置函数。这些内置函数可以帮助用户更加方便地处理表中的数据。主要包括:

    函数作用
    数学函数用于处理数字,这类函数包括绝对值函数,正弦函数,余弦函数和获取随机数等。
    字符串函数用于处理字符串,其中包括字符串连接函数,字符串比较函数,字符串中字母大小写转换函数等。
    日期和时间函数用于处理日期和时间,其中包括获取当前时间的函数,获取当前日期的函数,返回年份的函数和返回日期的函数等。
    条件判断函数用于在SQL语句中控制条件选择,其中包括IF语句,CASE语句和WHERE语句等。
    系统信息函数用于获取MySQL数据库的系统信息,其中包括获取数据库名的函数,获取当前用户的函数和获取数据库版本的函数等
    加密函数用于对字符串进行加密解密,其中包括字符串加密函数和解密函数等
    其他函数包括格式化函数和锁函数等

    MySQL的内置函数不但可以在SELECT查询语句中应用,同样也可以在INSERT、UPDATE和DELECT等语句中应用。例如,在INSERT语句中,应用日期时间函数获取系统的当前时间,并且将其添加到数据表中。MySQL内置函数可以对表中数据进行相应的处理,以便得到用户希望得到的数据。

    1 数学函数

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

    函数作用
    ABS(x)返回x的绝对值
    CEIL(x),CEILIN(x)返回不小于x的最小的整数值
    FLOOR(x)返回不大于x的最大整数值
    RAND()返回0~1的随机数
    RAND(x)返回0~1的随机数,x值相同时返回的随机数相同
    SIGN(x)返回参数作为-1,0或1的符号,该符号取决于x的值为负,0或正
    PI()返回圆周率的值。默认的显示小数位7位,然后MySQL内部会使用完全双精度
    TRUNCATE(x,y)返回数值x保留到小数点后y位的值,截断时不进行四舍五入
    ROUND(x)返回离x最近的整数
    ROUND(x,y)保留x小数点后y位的值,但截断时要进行四舍五入
    POW(x,y),POWER(x,y)返回x的y乘方的结果值
    SORT(x)返回非负数x的二次方根
    EXP(x)返回e的x乘方后的值(自然对数的底)
    MOD(x,y)返回x除以y以后的余数。x或y为null时,则返回null
    LOG(x)返回x的基数为2的对数
    LOG10(x)返回x的基数为10的对数
    RADIANS(x)将角度转为弧度
    DEGREES(x)将弧度转换为角度
    SIN(x)返回x的正弦,其中x在为弧度值
    ASIN(x)返回x的反正弦,即正弦为x的值。若x不在-1~1之间,则返回NULL
    COS(x)返回x的余弦,x为弧度值
    ACOS(x)返回x的反余弦,即余弦是x的值,若x不在-1~1之间,则返回NULL
    TAN(x)返回x的正切值,x 为给定的弧度值
    ATAN(x),ATAN2(x,y)返回两个变量x及y的反正切,它类似于y或x的反正切计算。除非两个参数的符号均用于确定结果所在象限
    COT(x)返回x的余切

    1.1 ABS

    mysql> select abs(-0.1),abs(0.1),abs(0),abs(-0),abs(null);
    +-----------+----------+--------+---------+-----------+
    | abs(-0.1) | abs(0.1) | abs(0) | abs(-0) | abs(null) |
    +-----------+----------+--------+---------+-----------+
    |       0.1 |      0.1 |      0 |       0 |      NULL |
    +-----------+----------+--------+---------+-----------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.2 CEIL和CEILIN

    mysql> select ceil(1.5),ceil(1.9),ceil(1.4),ceil(0),ceil(null);
    +-----------+-----------+-----------+---------+------------+
    | ceil(1.5) | ceil(1.9) | ceil(1.4) | ceil(0) | ceil(null) |
    +-----------+-----------+-----------+---------+------------+
    |         2 |         2 |         2 |       0 |       NULL |
    +-----------+-----------+-----------+---------+------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.3 FLOOR

    mysql> select floor(1.5),floor(1.9),floor(1.4),floor(0),ceil(null);
    +------------+------------+------------+----------+------------+
    | floor(1.5) | floor(1.9) | floor(1.4) | floor(0) | ceil(null) |
    +------------+------------+------------+----------+------------+
    |          1 |          1 |          1 |        0 |       NULL |
    +------------+------------+------------+----------+------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.4 MOD

    mysql> select mod(9,2),mod(null,2),mod(2,null),mod(0,9),mod(9,0);
    +----------+-------------+-------------+----------+----------+
    | mod(9,2) | mod(null,2) | mod(2,null) | mod(0,9) | mod(9,0) |
    +----------+-------------+-------------+----------+----------+
    |        1 |        NULL |        NULL |        0 |     NULL |
    +----------+-------------+-------------+----------+----------+
    1 row in set, 1 warning (0.01 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.5 ROUND

    mysql> select round(1.45),round(1.45,1),round(1.45,3),round(1.45,null);
    +-------------+---------------+---------------+------------------+
    | round(1.45) | round(1.45,1) | round(1.45,3) | round(1.45,null) |
    +-------------+---------------+---------------+------------------+
    |           1 |           1.5 |         1.450 |             NULL |
    +-------------+---------------+---------------+------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.6 TRUNCATE

    当y值是小数时,会进行四舍五入。例如y为1.6时,默认为2。

    mysql> select truncate(1.45,0),truncate(1.45,1),truncate(1.45,1.6),truncate(1.45,-1.6),truncate(1.45,null);
    +------------------+------------------+--------------------+---------------------+---------------------+
    | truncate(1.45,0) | truncate(1.45,1) | truncate(1.45,1.6) | truncate(1.45,-1.6) | truncate(1.45,null) |
    +------------------+------------------+--------------------+---------------------+---------------------+
    |                1 |              1.4 |               1.45 |                   0 |                NULL |
    +------------------+------------------+--------------------+---------------------+---------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2 字符串函数

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

    函数作用
    CHAR_LENGTH(s)返回字符串s的字符数
    LENGTH(s)返回值为字符串s的长度,单位为字节。一个多字节字符算作多字节。这意味着对于一个包含5个2字节字符的字符串,LENGTH()的返回值为10,而CHAR_LENGTH()的返回值为5
    CONCAT(s1,s2,...)返回结果为连接参数产生的字符串。如有任何一个参数为NULL,则返回值为NULL。或许有一个或多个参数。
    CONCAT_WS(x,s1,s2,...)同CONCAT(s1,s2,…)函数,但是每个字符串直接要加上x
    INSERT(s1,x,len,s2)将字符串s1从第x位置开始,len个字符长的子串替换为字符串s2
    UPPER(s),UCASE(s)将字符串s的所有字母都变成大写字母
    LOWER(s),LCASE(s)将字符串s的所有字母都变成小写字母
    `LEFT(s,n)`返回从字符串s开始的最左n个字符。如果n为NULL,则返回NULL
    RIGHT(s,n)从字符串是开始,返回最右n个字符。如果n为NULL,则返回NULL
    LPAD(s1,len,s2)返回字符串s1,其左边由字符串s2填补到len字符长度。假如s1的长度大于len,则返回值被缩短至len字符相同长度
    RPAD(s1,len,s2)返回字符串s1,其右边被字符串s2填补至len字符长度。假如字符串s1的长度大于len,则返回值被缩短到与len字符相同长度
    LTRIM(s)返回字符串s,其引导空格字符被删除
    RTRIM(s)返回字符串s,其结尾空格字符被删除
    TRIM(s)去掉字符串s开始处和结尾处的空格
    TRIM(s1 FROM s)去掉字符串s开始处和结尾处的字符串s1
    REPEAT(s,n)将字符串s重复n次
    SPACE(n)返回n个空格
    REPLACE(s,s1,s2)用字符串s2替代字符串s中的字符串s1
    STRCMP(s1,s2)比较字符串s1和s2的ASCII码值大小
    SUBSTRING(s,n,len)获取从字符串s中的第n个位置开始长度为len的字符串
    MID(s,n,len)同SUBSTRING(s,n,len)
    LOCATE(s1,s),POSITION(s1 IN s)从字符串s中获取s1的开始位置
    INSTR(s,s1)查找字符串s1在s中的位置,返回首次出现位置的索引值
    REVERSE(s)将字符串s的顺序反过来
    ELT(n,s1,s2,...)返回第n个字符串
    EXPORT_SET(bits,on,off[,separator[,number_of_bits]])返回一个字符串,生成规则如下:针对bits的二进制格式,如果其位为1,则返回一个on值;如果其位为0,则返回off值。每个字符串使用separator进行分隔,默认值为“.”。number_of_bits参数指定bits可用的位数,默认为64位。例如:生成数字182的二进制(10110110)替换格式,以“@”作为分隔符,设置有效位为6位。其语句如下:select EXPORT_SET(182,'Y','N','@',6);其运行结果为:N@Y@Y@N@Y@Y
    FIELD(s,s1,s2,...)返回第一个与字符串s匹配的字符串的位置
    FIND_IN_SET(s1,s2)返回在字符串s2中与s1匹配的字符串的位置
    MAKE_SET(x,s1,s2,...)按x的二进制数从s1,s2,…sn中选取字符串

    2.1 CONCAT

    mysql> select concat('ab','cd'),concat('ab',null),concat(1,'ab'),concat(1,2),concat(2,bin(10));
    +-------------------+-------------------+----------------+-------------+-------------------+
    | concat('ab','cd') | concat('ab',null) | concat(1,'ab') | concat(1,2) | concat(2,bin(10)) |
    +-------------------+-------------------+----------------+-------------+-------------------+
    | abcd              | NULL              | 1ab            | 12          | 21010             |
    +-------------------+-------------------+----------------+-------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.2 CONCAT_WS

    该函数可以实现指定分隔符并拼接字符串。

    mysql> select concat_ws('^','a','b','c');
    +----------------------------+
    | concat_ws('^','a','b','c') |
    +----------------------------+
    | a^b^c                      |
    +----------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.3 INSERT

    字符串的位置从1开始。

    mysql> select insert('12345678',2,3,'abc');
    +------------------------------+
    | insert('12345678',2,3,'abc') |
    +------------------------------+
    | 1abc5678                     |
    +------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select insert('12345678',2,3,'abcdef');
    +---------------------------------+
    | insert('12345678',2,3,'abcdef') |
    +---------------------------------+
    | 1abcdef5678                     |
    +---------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.4 LOWER和UPPER

    mysql> select LOWER('aBcD'),UPPER('aBcD'),LCASE('aBcD'),UCASE('aBcD');
    +---------------+---------------+---------------+---------------+
    | LOWER('aBcD') | UPPER('aBcD') | LCASE('aBcD') | UCASE('aBcD') |
    +---------------+---------------+---------------+---------------+
    | abcd          | ABCD          | abcd          | ABCD          |
    +---------------+---------------+---------------+---------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.5 LEFT和RIGHT

    mysql> select LEFT('123456',3),RIGHT('123456',3),LEFT('123456',null),RIGHT('123456',null),LEFT('123456',0),RIGHT('123456',0);
    +------------------+-------------------+---------------------+----------------------+------------------+-------------------+
    | LEFT('123456',3) | RIGHT('123456',3) | LEFT('123456',null) | RIGHT('123456',null) | LEFT('123456',0) | RIGHT('123456',0) |
    +------------------+-------------------+---------------------+----------------------+------------------+-------------------+
    | 123              | 456               | NULL                | NULL                 |                  |                   |
    +------------------+-------------------+---------------------+----------------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.6 LPAD和RPAD

    mysql> select lpad('123',5,'a'),rpad('123',5,'b'),lpad('123',0,'a'),lpad('123',5,null),lpad('123',4,'aaa');
    +-------------------+-------------------+-------------------+--------------------+---------------------+
    | lpad('123',5,'a') | rpad('123',5,'b') | lpad('123',0,'a') | lpad('123',5,null) | lpad('123',4,'aaa') |
    +-------------------+-------------------+-------------------+--------------------+---------------------+
    | aa123             | 123bb             |                   | NULL               | a123                |
    +-------------------+-------------------+-------------------+--------------------+---------------------+
    1 row in set (0.01 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.7 LTRIM和RTRIM

    mysql> select ltrim('  abcd'),rtrim('abcd  '),trim(' abcd '),trim('a' from 'aabcdaa');
    +-----------------+-----------------+----------------+--------------------------+
    | ltrim('  abcd') | rtrim('abcd  ') | trim(' abcd ') | trim('a' from 'aabcdaa') |
    +-----------------+-----------------+----------------+--------------------------+
    | abcd            | abcd            | abcd           | bcd                      |
    +-----------------+-----------------+----------------+--------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.8 REPEAT

    mysql> select repeat('abc',3),repeat('abc',0),repeat('abc',null);
    +-----------------+-----------------+--------------------+
    | repeat('abc',3) | repeat('abc',0) | repeat('abc',null) |
    +-----------------+-----------------+--------------------+
    | abcabcabc       |                 | NULL               |
    +-----------------+-----------------+--------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.9 REPLACE

    mysql> select replace('abcd','a','b'),replace('abcd','a',null),replace('abcd',null,'a');
    +-------------------------+--------------------------+--------------------------+
    | replace('abcd','a','b') | replace('abcd','a',null) | replace('abcd',null,'a') |
    +-------------------------+--------------------------+--------------------------+
    | bbcd                    | NULL                     | NULL                     |
    +-------------------------+--------------------------+--------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.10 STRCMP

    STRCMP(s1,s2),比较字符串s1和s2的ASCII码值大小。如果s1比s2小,则返回-1;如果s1和s2相等返回0;如果s1比s2大,则返回1。

    mysql> select strcmp('a','b'),strcmp('c','b'),strcmp('c','abcd'),strcmp(null,'z'),strcmp('z',null);
    +-----------------+-----------------+--------------------+------------------+------------------+
    | strcmp('a','b') | strcmp('c','b') | strcmp('c','abcd') | strcmp(null,'z') | strcmp('z',null) |
    +-----------------+-----------------+--------------------+------------------+------------------+
    |              -1 |               1 |                  1 |             NULL |             NULL |
    +-----------------+-----------------+--------------------+------------------+------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2.11 SUBSTRING

    字符串起始位置从1开始。

    mysql> select substring('123456',2,3),substring('123456',0,3),substring('123456',null,3),substring('123456',2,0);
    +-------------------------+-------------------------+----------------------------+-------------------------+
    | substring('123456',2,3) | substring('123456',0,3) | substring('123456',null,3) | substring('123456',2,0) |
    +-------------------------+-------------------------+----------------------------+-------------------------+
    | 234                     |                         | NULL                       |                         |
    +-------------------------+-------------------------+----------------------------+-------------------------+
    1 row in set (0.00 sec)
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3 日期和时间函数

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

    函数作用
    CURDATE(),CURRENT_DATE()返回当前日期
    CURTIME(),CURRENT_TIME()返回当前时间
    NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP()返回当前日期与时间
    UNIX_TIMESTAMP()以UNXI时间戳的形式返回当前时间
    UNIX_TIMESTAMP(d)将时间d以UNIX时间戳的形式返回
    FROM_UNIXTIME(d)把UNIX时间戳的时间转换为普通格式的时间
    UTC_DATE()返回UTC(Universal Coordinated Time 国际协调时间)日期
    UTC_TIME()返回UTC时间
    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 d)从日期d中获取指定的值,type指定返回的值,如YEAR,HOUR等
    TIME_TO_SEC(t)将时间转换为秒
    SEC_TO_TIME(s)将以秒为单位的时间s转换为时分秒的格式
    TO_DAYS(d)计算日期d~0000年1月1日的天数
    FROM_DAYS(d)计算从0000年1月1日开始n天后的日期
    DATEDIFF(d1,d2)计算日期d1~d2之间相隔的天数
    ADDDATE(d,n)计算起始日期d加上n天的日期
    ADDDATE(d,INTERVAL expr type)计算起始日期d加上一个时间段后的日期select ADDDATE('2011-07-01',INTERVAL,'12' YEAR_MONTH);
    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_FROMAT(d,f)按照表达式f的要求显示日期d
    TIME_FORMAT(t,f)按照表达式f的要求显示时间t
    GET_FORMAt(type,s)根据字符串s获取type类型数据的显示格式
    STR_TO_DATE(str, format) 根据fmt格式字符串将str字符串转换为日期值。可能会根据输入和格式字符串返回DATE,TIME或DATETIME值。如果输入字符串是非法的,则返回NULL。

    3.1 CURDATE

    mysql> select curdate();
    +------------+
    | curdate()  |
    +------------+
    | 2022-07-08 |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.2 CURTIME

    mysql> select curtime();
    +-----------+
    | curtime() |
    +-----------+
    | 15:41:28  |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.3 NOW

    mysql> select now(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE(),LOCALTIMESTAMP();
    +---------------------+---------------------+---------------------+---------------------+---------------------+
    | now()               | CURRENT_TIMESTAMP() | LOCALTIME()         | SYSDATE()           | LOCALTIMESTAMP()    |
    +---------------------+---------------------+---------------------+---------------------+---------------------+
    | 2022-07-08 15:43:20 | 2022-07-08 15:43:20 | 2022-07-08 15:43:20 | 2022-07-08 15:43:20 | 2022-07-08 15:43:20 |
    +---------------------+---------------------+---------------------+---------------------+---------------------+
    1 row in set (0.01 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.4 UNIX_TIMESTAMP

    mysql> select unix_timestamp(now()),unix_timestamp('2022/01/01 11:11:11'),unix_timestamp('2022-01-01 11:11:11');
    +-----------------------+---------------------------------------+---------------------------------------+
    | unix_timestamp(now()) | unix_timestamp('2022/01/01 11:11:11') | unix_timestamp('2022-01-01 11:11:11') |
    +-----------------------+---------------------------------------+---------------------------------------+
    |            1657266313 |                            1641006671 |                            1641006671 |
    +-----------------------+---------------------------------------+---------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.5 FROM_UNIXTIME

    mysql> select from_unixtime(1641006671);
    +---------------------------+
    | from_unixtime(1641006671) |
    +---------------------------+
    | 2022-01-01 11:11:11       |
    +---------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.6 DATE_FROMAT

    DATE_FROMAT(data,fmt)按照字符串fmt格式化日期date值,其中fmt的日期格式可以为:

    格式符格式说明
    %S,%s两位数字形式的秒(00,01,…59)
    %i两位数字形式的分(00,01,…59)
    %H两位数字形式的小时,24小时(00,01,…23)
    %H两位数字形式的小时,24小时(00,01,…23)
    %h,%I两位数字形式的小时,12小时(01,02,…12)
    %k数字形式的小时,24小时(0,1,…23)
    %l数字形式的小时,12小时(1,2,…12)
    %T24小时的时间形式(hh:mm:ss)
    %r12小时的时间形式(hh:mm:ssAM 或 hh:mm:ssPM)
    %pAM或PM
    %W一周中每一天的名称(Sunday,Monday,…Saturday)
    %a一周中每一天名称的缩写(Sun,Mon,…Sat)
    %d两位数字表示月中的天数(00,01,…31)
    %e数字形式表示月中的天数(1,2,…31)
    %D英文后缀表示月中的天数(1st,2nd,3rd,…)
    %w以数字形式表示周中的天数(0=Sunday,1=Monday,…6=Saturday)
    %j以3位数字表示年中的天数(001,002,…366)
    %U周(0,1,52),其中Sunday为周中的第一天
    %u周(0,1,52),其中Monday为周中的第一天
    %M月名(January,February,…December)
    %b缩写的月名(Jan,Feb,…Dec)
    %m两位数字表示的月份(01,02,…12)
    %c数字表示的月份(1,2,…12)
    %Y4位数字表示的年份
    %y两位数字表示的年份
    %%直接值“%”
    mysql> select date_format(now(),'%Y-%m-%d'),date_format('2022-01-01','%Y/%m/%d %H');
    +-------------------------------+-----------------------------------------+
    | date_format(now(),'%Y-%m-%d') | date_format('2022-01-01','%Y/%m/%d %H') |
    +-------------------------------+-----------------------------------------+
    | 2022-07-08                    | 2022/01/01 00                           |
    +-------------------------------+-----------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.7 DATE_ADD

    DATE_ADD(date,INTERVAL expr type)函数,返回与所给日期date相差INTERVAL时间段的日期。其中:

    • INTERVAL是间隔类型关键字;
    • expr是一个表达式,这个表达式对应后面的类型;
    • type是间隔类型;

    MySQL提供了13种间隔类型:

    表达式类型描述格式
    HOUR小时hh
    MINUTEmm
    SECONDss
    YEARYY
    MONTHMM
    DAYDD
    YEAR_MONTH年和月YY-MM
    DAY_HOUR日和小时DD hh
    DAY_MINUTE日和分钟DD hh:mm
    DAY_SECOND日和秒DD hh:mm:ss
    HOUR_MINUTE小时和分hh:mm
    HOUR_SECOND小时和秒hh:ss
    MINUTE_SECOND分钟和秒mm:ss
    mysql> select now() current,date_add(now(),INTERVAL 31 day) after31days,date_add(now(),INTERVAL '-1_-2' year_month);
    +---------------------+---------------------+---------------------------------------------+
    | current             | after31days         | date_add(now(),INTERVAL '-1_-2' year_month) |
    +---------------------+---------------------+---------------------------------------------+
    | 2022-07-08 16:38:50 | 2022-08-08 16:38:50 | 2021-05-08 16:38:50                         |
    +---------------------+---------------------+---------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.8 DATEDIFF

    DATEDIFF(date1,date2)函数,用来计算两个日期之间相差的天数。

    mysql> select datediff('2021-01-01',now()),datediff('2022-01-02','2021-07-06');
    +------------------------------+-------------------------------------+
    | datediff('2021-01-01',now()) | datediff('2022-01-02','2021-07-06') |
    +------------------------------+-------------------------------------+
    |                         -553 |                                 180 |
    +------------------------------+-------------------------------------+
    1 row in set (0.01 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    4 条件判断函数

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

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

    5 系统信息函数

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

    函数作用示例
    VERSION()获取数据库的版本号select VERSION();
    CONNECTION_ID()获取服务器的连接数select CONNECTION_ID();
    DATABASE(),SCHEMA()获取当前数据库名select DATABASE(),SCHEMA();
    USER(),SYSTEM_USER(),SESSION_USER()获取当前用户select USER(),SYSTEM_USER(),SESSION_USER();
    CURRENT_USER()获取当前用户select CURRENT_USER();
    CHARSET(str)获取字符串str的字符集select CHARSET('mrsoft');
    COLLATION(str)获取字符串str的字符排列方式select COLLATION('mrsoft');
    LAST_INSERT_ID()获取最近生成的AUTO_INCREMENTselect LAST_INSERT_ID();

    6 加密函数

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

    函数作用示例
    PASSWORD(str)对字符串str进行加密。经此函数加密后的数据是不可逆的。其经常用于对用户注册的密码进行加密处理对字符串mrsoft进行加密,其语句如下:select PASSWORD('mrsoft');
    MD5(str)对字符串str进行加密。经常用于对普通数据进行加密。select MD5('mrsoft');
    ENCODE(str,pswd_str)使用字符串pswd_str来加密字符串str。加密的结果时一个二进制数,必须使用BLOB类型的字段来保存它使用字符串mr对mrsoft进行加密处理,select ENCODE('mrsoft','mr');
    DECODE(crypt_str,pswd_str)使用字符串pswd_str来为crypt_str解密。crypt_str是通过ENCODE(str,pswd_str)加密后的二进制数据。字符串pswd_str应该与加密时的字符串pswd_str是相同的。select DECODE(ENCODE('mrsoft','mr'),'mr');
    • PASSWORD(str)函数经常用来给密码加密。MySQL用户需要设置密码,用户不能将未加密的密码直接存储到MySQL的user表中。因为登录MySQL数据库时,数据库系统会将输入的密码先通过PASSWORD(str)函数加密,然后与数据库中的密码进行比较,匹配成功后才可以登录。

    7 其他函数

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

    函数作用示例
    FORMAT(x,n)将数字x进行格式化,将x保留到小数点后n位。这个过程需要四舍五入
    ASCII(s)返回字符串s的第一个字符的ASCII码
    BIN(x)返回x的二进制编码
    HEX(x)返回x的十六进制编码
    OCT(x)返回x的八进制编码
    CONV(x,f1,f2)将x从f1进制变成f2进制数
    INET_ATON(IP)可以将IP地址转换为数字表示select INET_ATON('192.168.30.1');
    INET_NTOA(N)可以将数字n转换成IP的形式select INET_NTOA(3232243201);
    GET_LOCT(name,time)定义一个名称为name,持续时间长度为tiime秒的锁。锁定成功,返回1;如果尝试超时,返回0;如果遇到错误,返回NULL。
    RELEASE_LOCK(name)接触名称为name的锁。如果解锁成功,返回1;如果尝试超时,返回0;如果解锁失败,返回NULL
    IS_FREE_LOCK(name)判断是否使用名为name的锁。如果使用,返回0;否则,返回1
    BENCHMARK(count,expr)将表达式expr重复执行count次,然后返回执行时间。该函数可以用来判断MySQL处理表达式的速度
    CONVERT(s USING cs)将字符串s的字符集变成cs
    CAST(x AS type)将x变成type类型,CAST(x AS type)CONVERT(x,type)这两个函数只对BINARY,CHAR,DATE,DATATIME,TIME,SIGNED INTEGER,UNSIGNED INTEGER这些类型起作用。但两种方法只是改变了输出值的数据类型,并没有改变表中字段的类型。

    7.1 INET_ATON和INET_NTOA

    INET_ATONINET_NTOA函数主要的用途是将字符串的IP地址转换为数字表示的网络字节序,这样可以更方便地进行IP或者网段的比较。

    mysql> select * from tip;
    +--------------+
    | ip           |
    +--------------+
    | 192.168.1.1  |
    | 192.168.1.3  |
    | 192.168.1.6  |
    | 192.168.1.10 |
    | 192.168.1.20 |
    | 192.168.1.30 |
    +--------------+
    6 rows in set (0.00 sec)
    
    mysql> select * from tip where ip>='192.168.1.3' and ip <='192.168.1.20';
    Empty set (0.00 sec)
    
    mysql> select * from tip where inet_aton(ip)>=inet_aton('192.168.1.3') and inet_aton(ip) <=inet_aton('192.168.1.20');
    +--------------+
    | ip           |
    +--------------+
    | 192.168.1.3  |
    | 192.168.1.6  |
    | 192.168.1.10 |
    | 192.168.1.20 |
    +--------------+
    4 rows in set (0.00 sec)
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    ruoyi前后端分离版本开发框架解读---让你快速入门
    【强基计划】数学与物理竞赛中的微积分部分视频
    html->课程表
    elasticsearch bucket 之rare terms聚合
    知识图谱从入门到应用——知识图谱的知识表示:基础知识
    volatile-可见性案例详解
    智能安防系统-视频监控系统
    03大数据技术之Hadoop(HDFS)
    【技术】Spring Boot 将 Word 转换为 PDF 2.0 版本
    postgres源码解析40 表创建执行全流程梳理--4
  • 原文地址:https://blog.csdn.net/qui910/article/details/126945799