• 1,MySQL常用函数


    一,MySQL聚合函数

    1AVG()函数

    AVG()函数是一个聚合函数,它用于计算一组值或表达式的平均值。

    AVG()函数的语法如下:

    AVG(DISTINCT expression)

    例如有如下products表:

    CREATE TABLE products(

      productCode INT AUTO_INCREMENT PRIMARY KEY,

      productName VARCHAR(50),

      productPrice DECIMAL(10,2)

    );

    如下数据:

    要计算products表中所有产品的平均价格,并且保留2位小数,SQL如下:

    SELECT ROUND(AVG(productPrice),2) '平均价格' FROM products;

    执行上面查询语句,得到以下结果:

    当数据中具有NULL的情况,AVG()函数忽略计算表中的NULL值。例如下数据:

    同样要计算products表中所有产品的平均价格,并且保留2位小数,SQL如下:

    SELECT ROUND(AVG(productPrice),2) '平均价格' FROM products;

    执行上面查询语句,得到结果:

    得到的结果与预期的结果不符合,我们可以使用IFNULL函数来替换NULL,SQL如下:

    SELECT ROUND(AVG(IFNULL(productPrice,0)),2) '平均价格' FROM products;

    执行上面查询语句,得到结果:

    2COUNT()函数

    COUNT()函数返回表中的行数。 COUNT()函数允许您对表中符合特定条件的所有行进行计数。

    COUNT()函数的语法如下 :

    COUNT(expression)

    COUNT()函数的返回类型为BIGINT。 如果没有找到匹配的行,则COUNT()函数返回0。COUNT函数有几种形式:

    COUNT(*)

    COUNT(expression)

    COUNT(DISTINCT expression)

    例如products表中有如下数据:

    COUNT(*):

    COUNT(*)函数返回由SELECT语句返回的结果集中的行数。COUNT(*)函数计算包含NULL和非NULL值的行,即所有行。例如:

    SELECT COUNT(*) FROM products;

    COUNT(expression):

    COUNT(expression)返回不包含NULL值的行数。例如:

    SELECT COUNT(productPrice) FROM products;

    COUNT(DISTINCT expression):

    COUNT(DISTINCT expression)返回不包含NULL值的唯一行数。例如:

    SELECT COUNT(DISTINCT productPrice) FROM products;

    3INSTR()函数

    INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串,则INSTR()函数返回零(0)。

    INSTR()函数的语法:

    INSTR(str,substr);

    INSTR()函数接受两个参数:

    str是要搜索的字符串。

    substr是要搜索的子字符串。

    INSTR()函数不区分大小写。这意味着如果通过小写,大写,标题大小写等,结果总是一样的。例如:

    SELECT INSTR('MySQL INSTR', 'SQL'),INSTR('MySQL INSTR', 'sql');

    要强制INSTR()函数根据以区分大小写的方式进行搜索,请使用BINARY运算符,如下:

    SELECT INSTR('MySQL INSTR', BINARY 'sql');

    4SUM()函数

    SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下:

    SUM(DISTINCT expression)

    如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0。

    DISTINCT运算符允许计算集合中的不同值。

    SUM函数忽略计算中的NULL值。

    例如products表中有如下数据:

    SELECT SUM(productPrice) FROM products;

    SELECT SUM(DISTINCT productPrice) FROM products;

    5 MIN函数/MAX()函数

    MIN()函数返回一组值中的最小值。MIN()函数的语法:

    MIN(expression);

    MAX()函数返回一组值中的最大值。MAX()函数的语法如下:

    MAX(expression);

    例如products表中有如下数据:

    找出商品价格最小的:

    SELECT MIN(productPrice) FROM products;

    找出商品价格最大的:

    SELECT MAX(productPrice) FROM products;

    6GROUP_CONCAT函数

    GROUP_CONCAT()函数将组中的字符串连接成为具有各种选项的单个字符串。

    GROUP_CONCAT()函数的语法:

    GROUP_CONCAT(DISTINCT expression

    ORDER BY expression

    SEPARATOR sep);

    例如products表中有如下数据:

    以特定的格式输出商品价格:

    SELECT GROUP_CONCAT(DISTINCT productPrice

    ORDER BY productPrice DESC

    SEPARATOR ';') FROM products;

    1,DISTINCT子句用于在连接分组之前消除组中的重复值。

    2,ORDER BY子句允许您在连接之前按升序或降序排序值。

    3,SEPARATOR指定在组中的值之间插入的文字值。如果不指定分隔符,则GROUP_CONCAT函数使用逗号(,)作为默认分隔符。

    4,GROUP_CONCAT函数忽略NULL值,如果找不到匹配的行,或者所有参数都为NULL值,则返回NULL。

    5,GROUP_CONCAT函数返回二进制或非二进制字符串,这取决于参数。 默认情况下,返回字符串的最大长度为1024。如果您需要更多的长度,可以通过在SESSION或GLOBAL级别设置group_concat_max_len系统变量来扩展最大长度。

    二,MySQL字符串函数

    1,CONCAT函数

    CONCAT()函数需要一个或多个字符串参数,并将它们连接成一个字符串。CONCAT()函数需要至少一个参数,否则会引起错误。

    CONCAT()函数的语法:

    CONCAT(string1,string2, ... );

    例如:

    SELECT CONCAT('MySQL','Zender');

    2,CONCAT_WS函数

    CONCAT_WS()函数将两个或多个字符串值与预定义的分隔符相连接。

    CONCAT_WS()函数的语法:

    CONCAT_WS(seperator,string1,string2, ... );

    例如:

    SELECT CONCAT_WS(',','A','B','C','D');

    注意:

    1,当且仅当作为分隔符的第一个参数为NULL时,CONCAT_WS函数才返回NULL。

    2,CONCAT_WS函数在分隔符参数之后跳过NULL值。 换句话说,它忽略NULL值。

    3LEFTRIGHT函数

    LEFT()函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。

    LEFT()函数和RIGHT()的语法 :

    LEFT(str,length);

    RIGHT(str,length);

    LEFT()函数接受两个参数:

    str是要提取子字符串的字符串。

    length是一个正整数,指定将从左边返回的字符数。

    LEFT()函数返回str字符串中最左边的长度字符。RIGHT()函数返回str字符串中最左边边的长度字符。如果str或length参数为NULL,则返回NULL值。

    例如:

    SELECT LEFT('MySQL LEFT', 5), RIGHT('MySQL LEFT', 5);

    4LENGTHCHAR_LENGTH函数

    首先需要了解MySQL支持各种字符集,可以使用SHOW CHARACTER SET语句来获取MySQL数据库服务器支持的所有字符集。

    Maxlen列存储字符集的字节数。在MySQL中,一个字符串可以是任何字符集。 如果一个字符串包含1个字节的字符,则其字符长度和以字节为单位测量的长度相等。 但是,如果字符串包含多字节字符,则其字节长度通常大于字符长度。

    1,获取以字节为单位的字符串长度,使用LENGTH函数,如下所示:

    LENGTH(str);

    2,获取以字符为单位的字符串长度,使用CHAR_LENGTH函数,如下所示:

    CHAR_LENGTH(str);

    例如:

    SET @s = CONVERT('1234567abc' USING ucs2);

    SELECT CHAR_LENGTH(@s), LENGTH(@s);

    首先,将MySQL字符串长度字符串转换为ucs2字符集,指定一个字符存储为2个字节。

    然后,分别使用CHAR_LENGTH和LENGTH函数来获取@s字符串的长度(以字节为单位)。因为@s字符串以2个字节来存储每个字符,所以其字符长度为10,而字节长度为20 。

    再次将MySQL字符串长度字符串转换为dec8字符集,dec8字符集是使用1个字节来存储每个字符的。因此,其字节长度和字符长度相等。结果如下:

    SET @s = CONVERT('1234567abc' USING dec8);

    SELECT CHAR_LENGTH(@s), LENGTH(@s);

    使用CHAR_LENGTH函数来检查是否有超过35个字符,如果超过了,则附加省略号(...),有如下数据:

    SELECT txt,

    IF(CHAR_LENGTH(txt) > 35, CONCAT(LEFT(txt,35), '...'),txt) txt2

    FROM testtables;

    5REPLACE字符串函数

    函数REPLACE(),可以用新的字符串替换表的列中的字符串。

    REPLACE()函数的语法如下:

    REPLACE(str,old_string,new_string);

    REPLACE()函数有三个参数,它将string中的old_string替换为new_string字符串。

    例如:

    SELECT REPLACE('MySQL LEFT','LEFT','RIGHT');

    6SUBSTRING函数

    SUBSTRING函数从特定位置开始的字符串返回一个给定长度的子字符串。

    SUBSTRING函数语法如下:

    SUBSTRING(string,position);

    SUBSTRING(string FROM position);

    有两个参数:

    string参数是要提取子字符串的字符串。

    position参数是一个整数,用于指定子串的起始字符,position可以是正或负整数。

    例如:

    SELECT SUBSTRING('MYSQL SUBSTRING', 7),SUBSTRING('MySQL SUBSTRING' FROM -10);

    要从字符串中提取的子字符串的长度,可以使用以下形式的SUBSTRING函数:

    SUBSTRING(string,position,length);

    SUBSTRING(string FROM position FOR length);

    例如:

    SELECT SUBSTRING('MySQL SUBSTRING',1,5), SUBSTRING('MySQL SUBSTRING' FROM 1 FOR 5);

    7TRIM函数

    TRIM()函数从字符串中删除不必要的前导和后缀字符。

    TRIM()函数的语法如下:

    TRIM([{BOTH|LEADING|TRAILING} [removed_str]] FROM str);

    可以使用LEADING(前导),TRAILING(尾随)或BOTH(前导和尾随)选项明确指示TRIM()函数从字符串中删除不必要的字符。如果没有指定任何内容,TRIM()函数默认使用BOTH选项。

    [removed_str]是要删除的字符串。默认情况下,它是一个空格。这意味着如果不指定特定的字符串,则TRIM()函数仅删除空格。

    str是要删除子字符removed_str的字符串。

    例如:

    从字符串中除去前导和尾随空格:

    SELECT TRIM(' MySQL 123 ');

    仅删除前导空格 :

    SELECT TRIM(LEADING FROM ' MySQL 123 ');

    仅删除尾随空格:

    SELECT TRIM(TRAILING FROM ' MySQL 123 ');

    8FORMAT函数

    FORMAT函数格式化各种语言环境中的十进制数。

    FORMAT函数语法如下:

    FOMRAT(N,D,locale);

    FORMAT函数接受三个参数:

    N是要格式化的数字。

    D是要舍入的小数位数。

    locale是一个可选参数,用于确定千个分隔符和分隔符之间的分组。如果省略locale操作符,MySQL将默认使用en_US。

    例如:

    SELECT FORMAT(14500.2018, 2), FORMAT(12500.2015, 2,'de_DE');

    de_DE语言环境使用点(.)来分隔千位和逗号(,)来分隔小数点。

    三,MySQL日期和时间函数

    1YEAR/MONTH/DAY函数

    YEAR/MONTH/DAY函数的语法如下:

    YEAR(date)

    MONTH(date)

    DAY(date)

    例如:

    SELECT YEAR('2017-03-23'),MONTH('2017-03-23'),DAY('2017-03-23');

    2NOW()函数

    NOW()函数以"YYYY-MM-DD HH:MM:DD"格式的字符串或数字返回配置的时区中的当前日期和时间。例如:

    SELECT NOW();

    3CURDATE函数

    CURDATE()函数将以"YYYY-MM-DD"格式的值返回当前日期。例如:

    SELECT CURDATE();

    CURDATE()函数的结果等同于以下表达式:

    SELECT DATE(NOW());

    CURDATE()函数只返回当前日期,NOW()函数返回当前时间的日期和时间部分。

    4 DATEDIFF函数

    DATEDIFF函数计算两个DATE,DATETIME或TIMESTAMP值之间的天数。

    DATEDIFF函数的语法如下:

    DATEDIFF(date_expression_1,date_expression_2);

    DATEDIFF函数接受两个任何有效日期或日期时间值的参数。如果传递DATETIME或TIMESTAMP值,则DATEDIFF函数仅将日期部分用于计算,并忽略时间部分。例如:

    SELECT DATEDIFF('2017-03-17','2017-02-17');

    5DATE_ADD函数

    DATE_ADD函数将间隔时间添加到DATE或DATETIME值。

    DATE_ADD函数的语法如下:

    DATE_ADD(start_date, INTERVAL expr unit);

    DATE_ADD函数有两个参数:

    start_date是DATE或DATETIME的起始值。

    INTERVAL expr unit是要添加到起始日期值的间隔值。

    例如:

    1,加1秒到时间:2017-12-31 23:59:59

    SELECT DATE_ADD('2017-12-31 23:59:59', INTERVAL 1 SECOND);

    2,添加1天到时间:2017-12-31 00:00:00

    SELECT DATE_ADD('2017-12-31 00:00:00',INTERVAL 1 DAY);

    3,在时间2017-12-31 00:00:00上加1分1秒。

    SELECT DATE_ADD('2017-12-31 00:00:00', INTERVAL '1:1' MINUTE_SECOND);

    4,在时间2017-12-31 00:00:00上加-1天10小时。

    SELECT DATE_ADD('2017-12-31 00:00:00', INTERVAL '-1 10' DAY_HOUR);

    6DATE_SUB函数

    DATE_SUB()函数从DATE或DATETIME值中减去时间值(或间隔)

    ATE_SUB()函数的语法如下:

    DATE_SUB(start_date,INTERVAL expr unit);

    DATE_SUB()函数接受两个参数:

    start_date是DATE或DATETIME的起始值。

    expr是一个字符串,用于确定从起始日期减去的间隔值。unit是expr可解析的间隔单位,例如DAY,HOUR等。

    例如:

    求昨天的日期值。

    SELECT DATE_SUB(CURDATE(),INTERVAL 1 DAY);

    7DATE_FORMAT函数

    日期值格式化为特定格式。

    DATE_FORMAT函数的语法如下:

    DATE_FORMAT(date,format);

    DATE_FORMAT()函数接受两个参数:

    date:是要格式化的有效日期值

    format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)。有关预定义说明符的列表,请参见下表。

    限定符

    含义

    %a

    三个字符缩写的工作日名称,例如:MonTueWed,等

    %b

    三个字符缩写的月份名称,例如:JanFebMar

    %c

    以数字表示的月份值,例如:1, 2, 3…12

    %D

    英文后缀如:0th1st2nd等的一个月之中的第几天

    %d

    如果是1个数字(小于10),那么一个月之中的第几天表示为加前导加0, 如:00, 01,02, …31

    %e

    没有前导零的月份的日子,例如:1,2,… 31

    %f

    微秒,范围在000000..999999

    %H

    24小时格式的小时,前导加0,例如:00,01..23

    %h

    小时,12小时格式,带前导零,例如:01,02 … 12

    %I

    %h相同

    %i

    分数为零,例如:00,01,… 59

    %j

    一年中的的第几天,前导为0,例如,001,002,… 366

    %k

    24小时格式的小时,无前导零,例如:0,1,2 … 23

    %l

    12小时格式的小时,无前导零,例如:0,1,2 … 12

    %M

    月份全名称,例如:January, February,…December

    %m

    具有前导零的月份名称,例如:00,01,02,… 12

    %p

    AMPM,取决于其他时间说明符

    %r

    表示时间,12小时格式hh:mm:ss AMPM

    %S

    表示秒,前导零,如:00,01,… 59

    %s

    %S相同

    %T

    表示时间,24小时格式hh:mm:ss

    %U

    周的第一天是星期日,例如:00,01,02 … 53时,前导零的周数

    %u

    周的第一天是星期一,例如:00,01,02 … 53时,前导零的周数

    %V

    %U相同,它与%X一起使用

    %v

    %u相同,它与%x一起使用

    %W

    工作日的全称,例如:Sunday, Monday,…, Saturday

    %w

    工作日,以数字来表示(0 = 星期日,1 = 星期一等)

    %X

    周的四位数表示年份,第一天是星期日; 经常与%V一起使用

    %x

    周的四位数表示年份,第一天是星期日; 经常与%v一起使用

    %Y

    表示年份,四位数,例如2000,2001,…等。

    %y

    表示年份,两位数,例如00,01,…等。

    %%

    将百分比(%)字符添加到输出

    常用的日期格式字符串:

    DATE_FORMAT字符串

    格式化日期

    %Y-%m-%d

    2017/4/30

    %e/%c/%Y

    4/7/2013

    %c/%e/%Y

    7/4/2013

    %d/%m/%Y

    4/7/2013

    %m/%d/%Y

    7/4/2013

    %e/%c/%Y %H:%i

    4/7/2013 11:20

    %c/%e/%Y %H:%i

    7/4/2013 11:20

    %d/%m/%Y %H:%i

    4/7/2013 11:20

    %m/%d/%Y %H:%i

    7/4/2013 11:20

    %e/%c/%Y %T

    4/7/2013 11:20

    %c/%e/%Y %T

    7/4/2013 11:20

    %d/%m/%Y %T

    4/7/2013 11:20

    %m/%d/%Y %T

    7/4/2013 11:20

    %a %D %b %Y

    Thu 4th Jul 2013

    %a %D %b %Y %H:%i

    Thu 4th Jul 2013 11:20

    %a %D %b %Y %T

    Thu 4th Jul 2013 11:20:05

    %a %b %e %Y

    Thu Jul 4 2013

    %a %b %e %Y %H:%i

    Thu Jul 4 2013 11:20

    %a %b %e %Y %T

    Thu Jul 4 2013 11:20:05

    %W %D %M %Y

    Thursday 4th July 2013

    %W %D %M %Y %H:%i

    Thursday 4th July 2013 11:20

    %W %D %M %Y %T

    Thursday 4th July 2013 11:20:05

    %l:%i %p %b %e, %Y

    7/4/2013 11:20

    %M %e, %Y

    4-Jul-13

    %a, %d %b %Y %T

    Thu, 04 Jul 2013 11:20:05

    例如:

    SELECT DATE_FORMAT(CURDATE(),'%c/%e/%Y %H:%i');

    8DAYNAME函数

    DAYNAME函数返回指定日期的工作日的名称。

    DAYNAME函数的语法如下:

    DAYNAME(date);

    如果日期为NULL或无效,例如2017-02-30,DAYNAME函数将返回NULL。例如:

    SELECT DAYNAME('2017-01-01');

    9DAYOFWEEK/WEEKDAY函数

    DAYOFWEEK/WEEKDAY函数返回日期的工作日索引值,即星期日为1,星期一为2,星期六为7。

    DAYOFWEEK/WEEKDAY函数的语法如下:

    DAYOFWEEK(date)

    WEEKDAY(date)

    DAYOFWEEK函数接受1个参数,即DATE或DATETIME值。 它返回一个整数,范围从1到7,表示星期日到星期六。如果日期为NULL,零(0000-00-00)或无效,则DAYOFWEEK函数返回NULL。例如:

    SELECT DAYOFWEEK('2017-03-23');

    10EXTRACT函数

    EXTRACT()函数提取日期的一部分。

    EXTRACT()函数的语法如下:

    EXTRACT(unit FROM date)

    EXTRACT()函数需要两个参数:unit和date。

    1,unit是要从日期中提取的间隔。 以下是unit参数的有效间隔。

    DAY

    DAY_HOUR

    DAY_MICROSECOND

    DAY_MINUTE

    DAY_SECOND

    HOUR

    HOUR_MICROSECOND

    HOUR_MINUTE

    HOUR_SECOND

    MICROSECOND

    MINUTE

    MINUTE_MICROSECOND

    MINUTE_SECOND

    MONTH

    QUARTER

    SECOND

    SECOND_MICROSECOND

    WEEK

    YEAR

    YEAR_MONTH

    2,date是DATE或DATETIME值,从中提取间隔的日期。

    例如:

    SELECT EXTRACT(DAY FROM '2017-03-23 19:14:43');

    11SYSDATE函数

    返回当前日期时间,格式为"YYYY-MM-DD HH:MM:SS"的值

    SYSDATE()函数的语法如下:

    SYSDATE(fsp);

    例如:

    SELECT SYSDATE(),SYSDATE(3);

    如果传递fsp参数,则结果将包括小数秒精度。

    12WEEK函数

    WEEK函数来获取日期的周数

    WEEK()函数的语法如下:

    WEEK(date, mode);

    WEEK函数接受两个参数:

    1,date是要获取周数的日期。

    2,mode是一个可选参数,用于确定周数计算的逻辑。它允许指定本周是从星期一还是星期日开始,返回的周数应在0到52之间或0到53之间。

    如果忽略mode参数,默认情况下WEEK函数将使用default_week_format系统变量的值。要获取default_week_format变量的当前值,请使用SHOW VARIABLES语句如下:

    SHOW VARIABLES LIKE 'default_week_format';

    default_week_format的默认值为0,下表格说明了mode参数如何影响WEEK函数:

    模式

    一周的第一天

    范围

    0

    星期日

    0-53

    1

    星期一

    0-53

    2

    星期日

    1-53

    3

    星期一

    1-53

    4

    星期日

    0-53

    5

    星期一

    0-53

    6

    星期日

    1-53

    7

    星期一

    1-53

    例如:

    SELECT WEEK('2017-03-23 19:14:43');

  • 相关阅读:
    JS的匿名函数和递归应用
    sql server中分布式查询随笔
    Oracle、DB2、SQLSERVER、Mysql、Access分页SQL语句梳理
    db2相关问题及解决方法
    DB2命令大全
    作用域和作用域链浅解析
    css居中的几个实现方法
    选择排序
    ... 语法记录
    call() 与 apply() 和 bind()
  • 原文地址:https://www.cnblogs.com/Zender/p/7977437.html
Copyright © 2020-2023  润新知