zoukankan      html  css  js  c++  java
  • 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');

  • 相关阅读:
    OleDbCommand 的用法
    递归求阶乘
    C#重写窗体的方法
    HDU 5229 ZCC loves strings 博弈
    HDU 5228 ZCC loves straight flush 暴力
    POJ 1330 Nearest Common Ancestors LCA
    HDU 5234 Happy birthday 01背包
    HDU 5233 Gunner II 离散化
    fast-IO
    HDU 5265 pog loves szh II 二分
  • 原文地址:https://www.cnblogs.com/Zender/p/7977437.html
Copyright © 2011-2022 走看看