第35章 MySQL 函数教程

MySQL 有很多内置的函数,以下列出了这些函数的说明。


MySQL 字符串函数

函数描述实例
ASCII(s)return 字符串 s 的第一个字符的 ASCII 码。

return CustomerName 字段第一个字母的 ASCII 码:

```mysql

SELECT ASCII(CustomerName) AS NumCodeOfFirstChar
FROM Customers;

```

CHAR_LENGTH(s)return 字符串 s 的字符数

return 字符串 liulianjiangcsdn 的字符数

```mysql

SELECT CHAR_LENGTH("liulianjiangcsdn") AS LengthOfString;

```

CHARACTER_LENGTH(s)return 字符串 s 的字符数,等同于 CHAR_LENGTH(s)

return 字符串 liulianjiangcsdn 的字符数

```mysql

SELECT CHARACTER_LENGTH("liulianjiangcsdn") AS LengthOfString;

```

CONCAT(s1,s2...sn)字符串 s1,s2 等多个字符串合并为一个字符串

合并多个字符串

```mysql

SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;

```

CONCAT_WS(x, s1,s2...sn)同 CONCAT(s1,s2,...) 函数,但是每个字符串之间要加上 x,x 可以是分隔符

合并多个字符串,并添加分隔符:

```mysql

SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;

```

FIELD(s,s1,s2...)return 第一个字符串 s 在字符串列表(s1,s2...)中的位置

return 字符串 c 在列表值中的位置:

```mysql

SELECT FIELD("c", "a", "b", "c", "d", "e");

```

FIND_IN_SET(s1,s2)return 在字符串s2中与s1匹配的字符串的位置

return 字符串 c 在指定字符串中的位置:

```mysql

SELECT FIND_IN_SET("c", "a,b,c,d,e");

```

FORMAT(x,n)函数可以将数字 x 进行格式化 "#,###.##", 将 x 保留到小数点后 n 位,最后一位四舍五入。

格式化数字 "#,###.##" 形式:

```mysql

SELECT FORMAT(250500.5634, 2);     -- 输出 250,500.56

```

INSERT(s1,x,len,s2)字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串

从字符串第一个位置开始的 6 个字符替换为 liulianjiangcsdn:

```mysql

SELECT INSERT("google.com", 1, 6, "liulianjiangcsdn");  -- 输出:liulianjiangcsdn.com

```

LOCATE(s1,s)从字符串 s 中获取 s1 的开始位置

获取 b 在字符串 abc 中的位置:

```mysql

SELECT LOCATE('st','myteststring');  -- 5

```

return 字符串 abc 中 b 的位置:

```mysql

SELECT LOCATE('b', 'abc') -- 2

```

LCASE(s)将字符串 s 的所有字母变成小写字母

字符串 liulianjiangcsdn 转换为小写:

```mysql

SELECT LCASE('liulianjiangcsdn') -- liulianjiangcsdn

```

LEFT(s,n)return 字符串 s 的前 n 个字符

return 字符串 liulianjiangcsdn 中的前两个字符:

```mysql

SELECT LEFT('liulianjiangcsdn',2) -- ru

```

LOWER(s)将字符串 s 的所有字母变成小写字母

字符串 liulianjiangcsdn 转换为小写:

```mysql

SELECT LOWER('liulianjiangcsdn') -- liulianjiangcsdn

```

LPAD(s1,len,s2)在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len

将字符串 xx 填充到 abc 字符串的开始处:

```mysql

SELECT LPAD('abc',5,'xx') -- xxabc

```

LTRIM(s)去掉字符串 s 开始处的空格

去掉字符串 liulianjiangcsdn开始处的空格:

```mysql

SELECT LTRIM("    liulianjiangcsdn") AS LeftTrimmedString;-- liulianjiangcsdn

```

MID(s,n,len)从字符串 s 的 n 位置截取长度为 len 的子字符串,同 SUBSTRING(s,n,len)

从字符串 liulianjiangcsdn 中的第 2 个位置截取 3个 字符:

```mysql

SELECT MID("liulianjiangcsdn", 2, 3) AS ExtractString; -- UNO

```

POSITION(s1 IN s)从字符串 s 中获取 s1 的开始位置

return 字符串 abc 中 b 的位置:

```mysql

SELECT POSITION('b' in 'abc') -- 2

```

REPEAT(s,n)将字符串 s 重复 n 次

将字符串 liulianjiangcsdn 重复三次:

```mysql

SELECT REPEAT('liulianjiangcsdn',3) -- liulianjiangcsdnliulianjiangcsdnliulianjiangcsdn

```

REPLACE(s,s1,s2)将字符串 s2 替代字符串 s 中的字符串 s1

将字符串 abc 中的字符 a 替换为字符 x:

```mysql

SELECT REPLACE('abc','a','x') --xbc

```

REVERSE(s)将字符串s的顺序反过来

将字符串 abc 的顺序反过来:

```mysql

SELECT REVERSE('abc') -- cba

```

RIGHT(s,n)return 字符串 s 的后 n 个字符

return 字符串 liulianjiangcsdn 的后两个字符:

```mysql

SELECT RIGHT('liulianjiangcsdn',2) -- ob

```

RPAD(s1,len,s2)在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len

将字符串 xx 填充到 abc 字符串的结尾处:

```mysql

SELECT RPAD('abc',5,'xx') -- abcxx

```

RTRIM(s)去掉字符串 s 结尾处的空格

去掉字符串 liulianjiangcsdn 的末尾空格:

```mysql

SELECT RTRIM("liulianjiangcsdn     ") AS RightTrimmedString;   -- liulianjiangcsdn

```

SPACE(n)return n 个空格

return 10 个空格:

```mysql

SELECT SPACE(10);

```

STRCMP(s1,s2)比较字符串 s1 和 s2,如果 s1 与 s2 相等return 0 ,如果 s1>s2 return 1,如果 s1<s2 return -1

比较字符串:

```mysql

SELECT STRCMP("liulianjiangcsdn", "liulianjiangcsdn");  -- 0

```

SUBSTR(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串

从字符串 liulianjiangcsdn 中的第 2 个位置截取 3个 字符:

```mysql

SELECT SUBSTR("liulianjiangcsdn", 2, 3) AS ExtractString; -- UNO

```

SUBSTRING(s, start, length)从字符串 s 的 start 位置截取长度为 length 的子字符串,等同于 SUBSTR(s, start, length)

从字符串 liulianjiangcsdn 中的第 2 个位置截取 3个 字符:

```mysql

SELECT SUBSTRING("liulianjiangcsdn", 2, 3) AS ExtractString; -- UNO

```

SUBSTRING_INDEX(s, delimiter, number)return 从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。
如果 number 是正数,return 第 number 个字符左边的字符串。
如果 number 是负数,return 第(number 的绝对值(从右边数))个字符右边的字符串。

```mysql

SELECT SUBSTRING_INDEX('a*b','*',1) -- a
SELECT SUBSTRING_INDEX('a*b','*',-1)    -- b
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1)    -- c

```

TRIM(s)去掉字符串 s 开始和结尾处的空格

去掉字符串 liulianjiangcsdn 的首尾空格:

```mysql

SELECT TRIM('    liulianjiangcsdn    ') AS TrimmedString;

```

UCASE(s)将字符串转换为大写

将字符串 liulianjiangcsdn 转换为大写:

```mysql

SELECT UCASE("liulianjiangcsdn"); -- liulianjiangcsdn

```

UPPER(s)将字符串转换为大写

将字符串 liulianjiangcsdn 转换为大写:

```mysql

SELECT UPPER("liulianjiangcsdn"); -- liulianjiangcsdn

```


MySQL 数字函数

函数名描述实例
ABS(x)return x 的绝对值  

return -1 的绝对值:

```mysql

SELECT ABS(-1) -- return 1

```

ACOS(x)求 x 的反余弦值(单位为弧度),x 为一个数值

```mysql

SELECT ACOS(0.25);

```

ASIN(x)求反正弦值(单位为弧度),x 为一个数值

```mysql

SELECT ASIN(0.25);

```

ATAN(x)求反正切值(单位为弧度),x 为一个数值

```mysql

SELECT ATAN(2.5);

```

ATAN2(n, m)求反正切值(单位为弧度)

```mysql

SELECT ATAN2(-0.8, 2);

```

AVG(expression)return 一个表达式的平均值,expression 是一个字段

return Products 表中Price 字段的平均值:

```mysql

SELECT AVG(Price) AS AveragePrice FROM Products;

```

CEIL(x)return 大于或等于 x 的最小整数 

```mysql

SELECT CEIL(1.5) -- return 2

```

CEILING(x) return 大于或等于 x 的最小整数 

```mysql

SELECT CEILING(1.5); -- return 2

```

COS(x)求余弦值(参数是弧度)

```mysql

SELECT COS(2);

```

COT(x)求余切值(参数是弧度)

```mysql

SELECT COT(6);

```

COUNT(expression)return 查询的记录总数,expression 参数是一个字段或者 * 号

return Products 表中 products 字段总共有多少条记录:

```mysql

SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;

```

DEGREES(x)将弧度转换为角度  

```mysql

SELECT DEGREES(3.1415926535898) -- 180

```

n DIV m整除,n 为被除数,m 为除数

计算 10 除于 5:

```mysql

SELECT 10 DIV 5;  -- 2

```

EXP(x)return e 的 x 次方  

计算 e 的三次方:

```mysql

SELECT EXP(3) -- 20.085536923188

```

FLOOR(x)return 小于或等于 x 的最大整数  

小于或等于 1.5 的整数:

```mysql

SELECT FLOOR(1.5) -- return 1

```

GREATEST(expr1, expr2, expr3, ...)return 列表中的最大值

return 以下数字列表中的最大值:

```mysql

SELECT GREATEST(3, 12, 34, 8, 25); -- 34

```

return 以下字符串列表中的最大值:

```mysql

SELECT GREATEST("Google", "Runoob", "Apple");   -- Runoob

```

LEAST(expr1, expr2, expr3, ...)return 列表中的最小值

return 以下数字列表中的最小值:

```mysql

SELECT LEAST(3, 12, 34, 8, 25); -- 3

```

return 以下字符串列表中的最小值:

```mysql

SELECT LEAST("Google", "Runoob", "Apple");   -- Apple

```

LNreturn 数字的自然对数,以 e 为底。

return 2 的自然对数:

```mysql

SELECT LN(2);  -- 0.6931471805599453

```

LOG(x) 或 LOG(base, x)return 自然对数(以 e 为底的对数),如果带有 base 参数,则 base 为指定带底数。  

```mysql

SELECT LOG(20.085536923188) -- 3
SELECT LOG(2, 4); -- 2

```

LOG10(x)return 以 10 为底的对数  

```mysql

SELECT LOG10(100) -- 2

```

LOG2(x)return 以 2 为底的对数

return 以 2 为底 6 的对数:

```mysql

SELECT LOG2(6);  -- 2.584962500721156

```

MAX(expression)return 字段 expression 中的最大值

return 数据表 Products 中字段 Price 的最大值:

```mysql

SELECT MAX(Price) AS LargestPrice FROM Products;

```

MIN(expression)return 字段 expression 中的最小值

return 数据表 Products 中字段 Price 的最小值:

```mysql

SELECT MIN(Price) AS MinPrice FROM Products;

```

MOD(x,y)return x 除以 y 以后的余数 

5 除于 2 的余数:

```mysql

SELECT MOD(5,2) -- 1

```

PI()return 圆周率(3.141593)  

```mysql

SELECT PI() --3.141593

```

POW(x,y)return x 的 y 次方 

2 的 3 次方:

```mysql

SELECT POW(2,3) -- 8

```

POWER(x,y)return x 的 y 次方 

2 的 3 次方:

```mysql

SELECT POWER(2,3) -- 8

```

RADIANS(x)将角度转换为弧度  

180 度转换为弧度:

```mysql

SELECT RADIANS(180) -- 3.1415926535898

```

RAND()return 0 到 1 的随机数  

```mysql

SELECT RAND() --0.93099315644334

```

ROUND(x [,y])return 离 x 最近的整数,非必输参数 y 表示要四舍五入的小数位数,如果省略,则return 整数。

```mysql

SELECT ROUND(1.23456) --1SELECT ROUND(345.156, 2) -- 345.16

```

SIGN(x)return x 的符号,x 是负数、0、正数分别return -1、0 和 1 

```mysql

SELECT SIGN(-10) -- (-1)

```

SIN(x)求正弦值(参数是弧度)  

```mysql

SELECT SIN(RADIANS(30)) -- 0.5

```

SQRT(x)return x的平方根  

25 的平方根:

```mysql

SELECT SQRT(25) -- 5

```

SUM(expression)return 指定字段的总和

计算 OrderDetails 表中字段 Quantity 的总和:

```mysql

SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;

```

TAN(x)求正切值(参数是弧度)

```mysql

SELECT TAN(1.75);  -- -5.52037992250933

```

TRUNCATE(x,y)return 数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)

```mysql

SELECT TRUNCATE(1.23456,3) -- 1.234

```


MySQL 日期函数

函数名描述实例
ADDDATE(d,n)计算起始日期 d 加上 n 天的日期

```mysql

SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY);
->2017-06-25

```

ADDTIME(t,n)n 是一个时间表达式,时间 t 加上时间表达式 n

加 5 秒:

```mysql

SELECT ADDTIME('2011-11-11 11:11:11', 5);
->2011-11-11 11:11:16 (秒)

```

添加 2 小时, 10 分钟, 5 秒:

```mysql

SELECT ADDTIME("2020-06-15 09:34:21", "2:10:5"); 
-> 2020-06-15 11:44:26

```

CURDATE()return 当前日期

```mysql

SELECT CURDATE();
-> 2018-09-19

```

CURRENT_DATE()return 当前日期

```mysql

SELECT CURRENT_DATE();
-> 2018-09-19

```

CURRENT_TIMEreturn 当前时间

```mysql

SELECT CURRENT_TIME();
-> 19:59:02

```

CURRENT_TIMESTAMP()return 当前日期和时间

```mysql

SELECT CURRENT_TIMESTAMP()
-> 2018-09-19 20:57:43

```

CURTIME()return 当前时间

```mysql

SELECT CURTIME();
-> 19:59:02

```

DATE()从日期或日期时间表达式中提取日期值

```mysql

SELECT DATE("2017-06-15");    
-> 2017-06-15

```

DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数

```mysql

SELECT DATEDIFF('2001-01-01','2001-02-02')
-> -32

```

DATE_ADD(d,INTERVAL expr type)计算起始日期 d 加上一个时间段后的日期,type 值可以是:
  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

```mysql

SELECT DATE_ADD("2017-06-15", INTERVAL 10 DAY);    
-> 2017-06-25SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL 15 MINUTE);
-> 2017-06-15 09:49:21SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL -3 HOUR);
->2017-06-15 06:34:21SELECT DATE_ADD("2017-06-15 09:34:21", INTERVAL -3 MONTH);
->2017-04-15

```

DATE_FORMAT(d,f)按表达式 f的要求显示日期 d

```mysql

SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r')
-> 2011-11-11 11:11:11 AM

```

DATE_SUB(date,INTERVAL expr type)函数从日期减去指定的时间间隔。

Orders 表中 OrderDate 字段减去 2 天:

```mysql

SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate
FROM Orders

```

DAY(d)return 日期值 d 的日期部分

```mysql

SELECT DAY("2017-06-15");  
-> 15

```

DAYNAME(d)return 日期 d 是星期几,如 Monday,Tuesday

```mysql

SELECT DAYNAME('2011-11-11 11:11:11')
->Friday

```

DAYOFMONTH(d)计算日期 d 是本月的第几天

```mysql

SELECT DAYOFMONTH('2011-11-11 11:11:11')
->11

```

DAYOFWEEK(d)日期 d 今天是星期几,1 星期日,2 星期一,以此类推

```mysql

SELECT DAYOFWEEK('2011-11-11 11:11:11')
->6

```

DAYOFYEAR(d)计算日期 d 是本年的第几天

```mysql

SELECT DAYOFYEAR('2011-11-11 11:11:11')
->315

```

EXTRACT(type FROM d)从日期 d 中获取指定的值,type 指定return 的值。
type可取值为:
  • MICROSECOND
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
  • SECOND_MICROSECOND
  • MINUTE_MICROSECOND
  • MINUTE_SECOND
  • HOUR_MICROSECOND
  • HOUR_SECOND
  • HOUR_MINUTE
  • DAY_MICROSECOND
  • DAY_SECOND
  • DAY_MINUTE
  • DAY_HOUR
  • YEAR_MONTH

```mysql

SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') 
-> 11

```

FROM_DAYS(n)计算从 0000 年 1 月 1 日开始 n 天后的日期

```mysql

SELECT FROM_DAYS(1111)
-> 0003-01-16

```

HOUR(t)return t 中的小时值

```mysql

SELECT HOUR('1:2:3')
-> 1

```

LAST_DAY(d)return 给给定日期的那一月份的最后一天

```mysql

SELECT LAST_DAY("2017-06-20");
-> 2017-06-30

```

LOCALTIME()return 当前日期和时间

```mysql

SELECT LOCALTIME()
-> 2018-09-19 20:57:43

```

LOCALTIMESTAMP()return 当前日期和时间

```mysql

SELECT LOCALTIMESTAMP()
-> 2018-09-19 20:57:43

```

MAKEDATE(year, day-of-year)基于给定参数年份 year 和所在年中的天数序号 day-of-year return 一个日期

```mysql

SELECT MAKEDATE(2017, 3);
-> 2017-01-03

```

MAKETIME(hour, minute, second)组合时间,参数分别为小时、分钟、秒

```mysql

SELECT MAKETIME(11, 35, 4);
-> 11:35:04

```

MICROSECOND(date)return 日期参数所对应的微秒数

```mysql

SELECT MICROSECOND("2017-06-20 09:34:00.000023");
-> 23

```

MINUTE(t)return t 中的分钟值

```mysql

SELECT MINUTE('1:2:3')
-> 2

```

MONTHNAME(d)return 日期当中的月份名称,如 November

```mysql

SELECT MONTHNAME('2011-11-11 11:11:11')
-> November

```

MONTH(d)return 日期d中的月份值,1 到 12

```mysql

SELECT MONTH('2011-11-11 11:11:11')
->11

```

NOW()return 当前日期和时间

```mysql

SELECT NOW()
-> 2018-09-19 20:57:43

```

PERIOD_ADD(period, number)为 年-月 组合日期添加一个时段

```mysql

SELECT PERIOD_ADD(201703, 5);   
-> 201708

```

PERIOD_DIFF(period1, period2)return 两个时段之间的月份差值

```mysql

SELECT PERIOD_DIFF(201710, 201703);
-> 7

```

QUARTER(d)return 日期d是第几季节,return 1 到 4

```mysql

SELECT QUARTER('2011-11-11 11:11:11')
-> 4

```

SECOND(t)return t 中的秒钟值

```mysql

SELECT SECOND('1:2:3')
-> 3

```

SEC_TO_TIME(s)将以秒为单位的时间 s 转换为时分秒的格式

```mysql

SELECT SEC_TO_TIME(4320)
-> 01:12:00

```

STR_TO_DATE(string, format_mask)将字符串转变为日期

```mysql

SELECT STR_TO_DATE("August 10 2017", "%M %d %Y");
-> 2017-08-10

```

SUBDATE(d,n)日期 d 减去 n 天后的日期

```mysql

SELECT SUBDATE('2011-11-11 11:11:11', 1)
->2011-11-10 11:11:11 (默认是天)

```

SUBTIME(t,n)时间 t 减去 n 秒的时间

```mysql

SELECT SUBTIME('2011-11-11 11:11:11', 5)
->2011-11-11 11:11:06 (秒)

```

SYSDATE()return 当前日期和时间

```mysql

SELECT SYSDATE()
-> 2018-09-19 20:57:43

```

TIME(expression)提取传入表达式的时间部分

```mysql

SELECT TIME("19:30:10");
-> 19:30:10

```

TIME_FORMAT(t,f)按表达式 f 的要求显示时间 t

```mysql

SELECT TIME_FORMAT('11:11:11','%r')
11:11:11 AM

```

TIME_TO_SEC(t)将时间 t 转换为秒

```mysql

SELECT TIME_TO_SEC('1:12:00')
-> 4320

```

TIMEDIFF(time1, time2)计算时间差值

```mysql

mysql> SELECT TIMEDIFF("13:10:11", "13:10:10");
-> 00:00:01
mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
    ->                 '2000:01:01 00:00:00.000001');
        -> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
    ->                 '2008-12-30 01:01:01.000002');
        -> '46:58:57.999999'

```

TIMESTAMP(expression, interval)单个参数时,函数return 日期或日期时间表达式;有2个参数时,将参数加和

```mysql

mysql> SELECT TIMESTAMP("2017-07-23",  "13:10:11");
-> 2017-07-23 13:10:11
mysql> SELECT TIMESTAMP('2003-12-31');
        -> '2003-12-31 00:00:00'
mysql> SELECT TIMESTAMP('2003-12-31 12:00:00','12:00:00');
        -> '2004-01-01 00:00:00'

```

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)计算时间差,return datetime_expr2 − datetime_expr1 的时间差

```mysql

mysql> SELECT TIMESTAMPDIFF(DAY,'2003-02-01','2003-05-01');   // 计算两个时间相隔多少天
        -> 89
mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');   // 计算两个时间相隔多少月
        -> 3
mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');    // 计算两个时间相隔多少年
        -> -1
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55');  // 计算两个时间相隔多少分钟
        -> 128885

```

TO_DAYS(d)计算日期 d 距离 0000 年 1 月 1 日的天数

```mysql

SELECT TO_DAYS('0001-01-01 01:01:01')
-> 366

```

WEEK(d)计算日期 d 是本年的第几个星期,范围是 0 到 53

```mysql

SELECT WEEK('2011-11-11 11:11:11')
-> 45

```

WEEKDAY(d)日期 d 是星期几,0 表示星期一,1 表示星期二

```mysql

SELECT WEEKDAY("2017-06-15");
-> 3

```

WEEKOFYEAR(d)计算日期 d 是本年的第几个星期,范围是 0 到 53

```mysql

SELECT WEEKOFYEAR('2011-11-11 11:11:11')
-> 45

```

YEAR(d)return 年份

```mysql

SELECT YEAR("2017-06-15");
-> 2017

```

YEARWEEK(date, mode)return 年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推

```mysql

SELECT YEARWEEK("2017-06-15");
-> 201724

```


MySQL 高级函数

函数名描述实例
BIN(x) return x 的二进制编码

15 的 2 进制编码:

```mysql

SELECT BIN(15); -- 1111

```

BINARY(s)将字符串 s 转换为二进制字符串

```mysql

SELECT BINARY "liulianjiangcsdn";
-> liulianjiangcsdn

```

```mysql

CASE expression
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
   ...
    WHEN conditionN THEN resultN
    ELSE result
END

```

CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则return result1, 如果 condition2 成立,则return result2,当全部不成立则return result,而当有一个成立之后,后面的就不执行了。

```mysql

SELECT CASE 
  WHEN 1 > 0
  THEN '1 > 0'
  WHEN 2 > 0
  THEN '2 > 0'
  ELSE '3 > 0'
  END
->1 > 0

```

CAST(x AS type)转换数据类型

字符串日期转换为日期:

```mysql

SELECT CAST("2017-08-29" AS DATE);
-> 2017-08-29

```

COALESCE(expr1, expr2, ...., expr_n)return 参数中的第一个非空表达式(从左向右)

```mysql

SELECT COALESCE(NULL, NULL, NULL, 'liulianjiangcsdn.com', NULL, 'google.com');
-> liulianjiangcsdn.com

```

CONNECTION_ID()return 唯一的连接 ID

```mysql

SELECT CONNECTION_ID();
-> 4292835

```

CONV(x,f1,f2)return f1 进制数变成 f2 进制数

```mysql

SELECT CONV(15, 10, 2);
-> 1111

```

CONVERT(s USING cs)函数将字符串 s 的字符集变成 cs

```mysql

SELECT CHARSET('ABC')
->utf-8    SELECT CHARSET(CONVERT('ABC' USING gbk))
->gbk

```

CURRENT_USER()return 当前用户

```mysql

SELECT CURRENT_USER();
-> guest@%

```

DATABASE()return 当前database name

```mysql

SELECT DATABASE();   
-> liulianjiangcsdn

```

IF(expr,v1,v2)如果表达式 expr 成立,return 结果 v1;否则,return 结果 v2。

```mysql

SELECT IF(1 > 0,'正确','错误')    
->正确

```

IFNULL(v1,v2)如果 v1 的值不为 NULL,则return v1,否则return v2。

```mysql

SELECT IFNULL(null,'Hello Word')
->Hello Word

```

ISNULL(expression)判断表达式是否为 NULL

```mysql

SELECT ISNULL(NULL);
->1

```

LAST_INSERT_ID()return 最近生成的 AUTO_INCREMENT 值

```mysql

SELECT LAST_INSERT_ID();
->6

```

NULLIF(expr1, expr2)比较两个字符串,如果字符串 expr1 与 expr2 相等 return NULL,否则return expr1

```mysql

SELECT NULLIF(25, 25);
->

```

SESSION_USER()return 当前用户

```mysql

SELECT SESSION_USER();
-> guest@%

```

SYSTEM_USER()return 当前用户

```mysql

SELECT SYSTEM_USER();
-> guest@%

```

USER()return 当前用户

```mysql

SELECT USER();
-> guest@%

```

VERSION()return database的版本号

```mysql

SELECT VERSION()
-> 5.6.34

```

## 本专栏所有文章
第1章 MySQL 教程第2章 MySQL 安装教程
第3章 MySQL 管理教程第4章 MySQL PHP 语法教程
第5章 MySQL 连接教程第6章 MySQL 创建数据库教程
第7章 MySQL 删除数据库教程第8章 MySQL 选择数据库教程
第9章 MySQL 数据类型教程第10章 MySQL 创建数据表教程
第11章 MySQL 删除数据表教程第12章 MySQL 插入数据教程
第13章 MySQL 查询数据教程第14章 MySQL WHERE 子句教程
第15章 MySQL UPDATE 更新教程第16章 MySQL DELETE 语句教程
第17章 MySQL LIKE 子句教程第18章 MySQL UNION教程
第19章 MySQL 排序教程第20章 MySQL 分组教程
第21章 MySQL 连接的使用教程第22章 MySQL NULL 值处理教程
第23章 MySQL 正则表达式教程第24章 MySQL 事务教程
第25章 MySQL ALTER命令教程第26章 MySQL 索引教程
第27章 MySQL 临时表教程第28章 MySQL 复制表教程
第29章 MySQL 元数据教程第30章 MySQL 序列使用教程
第31章 MySQL 处理重复数据教程第32章 MySQL 及 SQL 注入教程
第33章 MySQL 导出数据教程第34章 MySQL 导入数据教程
第35章 MySQL 函数教程第36章 MySQL 运算符教程

寄语

本文有榴莲酱CSDN原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/qq441540598

  • 女人,可以不漂亮,但一定要活得精致,活得洒脱,活得自然。
  • 我的心每天都在旅行,早晨在大漠草原,夜晚在浩瀚星空,呼吸大海的气息,倾听布达拉宫诵经,掬一捧南极的冰雪,在撒哈拉沙漠穿行,经张家界的洞口,去神农架寻野人行踪,赏完马尔代夫的海景,去往下一座花城,看遍了多少美景,才懂得生活。
  • 想对你说漫漫长路陪你走,想对你说切切私语的温柔。
  • 古人相马不相皮,瘦吗虽瘦骨法奇;世无伯乐良可嗤,千金市马惟市肥。
  • 就算是很久才能见一次,可见了面也不会失去共同语言,这就好朋友间最自然的默契。从来都不需要花时间费精神去解释分开的时候发生过的一切。所有所有都那样的自然,就好像昨天才见过面,聊过天一般。这就是最好的死党,最棒的闺蜜。早安。
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

榴莲酱csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值