目 录CONTENT

文章目录

MySQL内置函数

筱晶哥哥
2022-01-17 / 0 评论 / 0 点赞 / 25 阅读 / 12767 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2024-03-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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

字符串函数

ASCII(str)

返回字符串 str 的第一个字符的 ASCII 码。

select ASCII("LiJing"); # 76

CHAR_LENGTH(str)和CHARACTER_LENGTH(str)

返回字符串 str 的字符数。

select CHAR_LENGTH("LiJing"); # 6
select CHARACTER_LENGTH("LiJing"); # 6

CONCAT(str1,str2,...)

字符串 str1,str2 等多个字符串合并为一个字符串。

select CONCAT("%","李","%"); # %李%

CONCAT_WS(separator,str1,str2,...)

同 CONCAT(str1,str2,...)函数,但是每个字符串之间要加上 separator,separator 可以是分隔符。

select CONCAT_WS("-","李","晶"); # 李-晶

select FIELD(str,str1,str2,str3,...)

返回第一个字符串 str 在字符串列表(str1,str2...)中的位置。

select FIELD("c", "a", "b", "c", "d", "e"); # 3

FIND_IN_SET(str,strlist)

返回在字符串strlist中与str匹配的字符串的位置。

select FIND_IN_SET("c", "a,b,c,d,e"); # 3

FORMAT(X,D)

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

select FORMAT("250500.5654", 2); # 250,500.57

INSERT(str,pos,len,newstr)

字符串 newstr 替换 str 的 pos 位置开始长度为 len 的字符串。

select INSERT("xiaojingge.com", 1, 10, "lijing"); # lijing.com

LOCATE(substr,str)

从字符串 str 中获取 substr 的开始位置。

select LOCATE('jing','lijing'); # 3

LCASE(str)和LOWER(str)

将字符串 str 的所有字母变成小写字母。

select LCASE("LiJing"); # lijing
select LOWER("LiJing"); # lijing

UCASE(str)和UPPER(str)

将字符串 str 的所有字母变成大写字母。

select LCASE("LiJing"); # LIJING
select LOWER("LiJing"); # LIJING

LEFT(str,len)

返回字符串 str 的前 len 个字符。

select LEFT("LiJing",2); # Li

RIGHT(str,len)

返回字符串 str 的后 len 个字符。

select RIGHT("LiJing",2); # ng

LPAD(str,len,padstr)

在字符串 str 的开始处填充字符串 padstr,使字符串长度达到 len。

select LPAD('LiJing',12,'8'); # 888888LiJing

RPAD(str,len,padstr)

在字符串 str 的结尾处填充字符串 padstr,使字符串长度达到 len。

select RPAD('LiJing',12,'8'); # LiJing888888

LTRIM(str)

去掉字符串 str 开始处的空格。

select LTRIM("       LiJing"); # LiJing

RTRIM(str)

去掉字符串 str 结尾处的空格。

select RTRIM("LiJing      "); # LiJing

MID(str,pos,len)

从字符串 str 的 pos 位置截取长度为 len 的子字符串,同 SUBSTRING(str,pos,len)

select MID("LiJing",3,4); # Jing

POSITION(substr IN str)

从字符串str 中获取 substr 的开始位置。

select POSITION('b' in 'abc'); # 2

REPEAT(str,count)

将字符串 s 重复 count 次。

select REPEAT("LiJing",3); # LiJingLiJingLiJing

REPLACE(str,from_str,to_str)

将字符串 to_str 替代字符串 str 中的字符串 from_str。

select REPLACE("LiJing","i","x"); # LxJxng

REVERSE(str)

将字符串 str 的顺序反过来。

select REVERSE("LiJing"); # gniJiL

SPACE(N)

返回 N 个空格。

select SPACE(10);

STRCMP(expr1,expr2)

比较字符串 expr1 和 expr2,如果 expr1 与 expr2 相等返回 0 ,如果 expr1 > expr2 返回 1,如果expr1 < expr2 返回 -1。

select STRCMP("LiJing","LiJing"); # 0

SUBSTR(str,pos,len)和SUBSTRING(str,pos,len)

从字符串 str 的 pos位置截取长度为 len的子字符串。

select SUBSTR("LiJing", 3, 4); # Jing
select SUBSTRING("LiJing", 3, 4); # Jing

SUBSTRING_INDEX(str,delim,count)

返回从字符串 str 的第 count个出现的分隔符 delim之后的子串。

如果 count是正数,返回第 count个字符左边的字符串。

如果 count是负数,返回第(count的绝对值(从右边数))个字符右边的字符串。

select SUBSTRING_INDEX('ab*c','*',1); # ab
select SUBSTRING_INDEX('a*b*c','*',-1); # c
select SUBSTRING_INDEX('a*b*c*d*e','*',3); # a*b*c
select SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1); # c

TRIM(str)

去掉字符串 str 开始和结尾处的空格。

select TRIM("   LiJing    "); # LiJing

日期函数

ADDDATE(expr,days)

计算起始日期 expr 加上days 天的日期。

select ADDDATE("2022-1-17",5); # 2022-01-22

ADDTIME(expr1,expr2)

expr2 是一个时间表达式,时间 expr1 加上时间表达式 expr2。

# 加 5 秒
select ADDTIME('2022-1-17 17:25:30', "5"); # 2022-01-17 17:25:35
# 添加 2 小时, 10 分钟, 5 秒
select ADDTIME('2022-1-17 17:25:30', "2:10:5"); # 2022-01-17 19:35:35

CURDATE()和CURRENT_DATE()

返回当前日期。

CURTIME()和CURRENT_TIME()

返回当前日期。

CURRENT_TIMESTAMP()

返回当前日期和时间。

DATE(expr)

从日期或日期时间表达式中提取日期值。

DATEDIFF(expr1,expr2)

计算日期 expr1-> expr2 之间相隔的天数。

DATE_ADD(date,INTERVAL expr unit)

计算起始日期 date 加上一个时间段后的日期,unit 值可以是:

  • 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
SELECT DATE_ADD("2022-01-17", INTERVAL 10 DAY); # 2022-01-27

SELECT DATE_ADD("2022-01-17 09:34:21", INTERVAL 15 MINUTE); # 2022-01-17 09:49:21

SELECT DATE_ADD("2022-01-17 09:34:21", INTERVAL -3 HOUR); # 2022-01-17 06:34:21

SELECT DATE_ADD("2022-01-17", INTERVAL -3 MONTH); # 2021-10-17

DATE_FORMAT(date,format)

按表达式 format 的要求显示日期 date。

SELECT DATE_FORMAT('2022-01-17 11:11:11','%Y-%m-%d %r'); # 2022-01-17 11:11:11 AM

DATE_SUB(date,INTERVAL expr unit)

函数从日期减去指定的时间间隔。

SELECT DATE_SUB("2022-01-17",INTERVAL 2 DAY); # 2022-01-15

DAY(date)

返回日期值 date 的日期部分。

DAYNAME(date)

返回日期 date 是星期几,如 Monday,Tuesday。

DAYOFMONTH(date)

计算日期 date 是本月的第几天。

DAYOFWEEK(date)

日期 date 今天是星期几,1 星期日,2 星期一,以此类推。

DAYOFYEAR(date)

计算日期 date 是本年的第几天。

EXTRACT(unit FROM date)

从日期 date 中获取指定的值,unit 指定返回的值。

unit 可取值为:

  • 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
SELECT EXTRACT(MINUTE FROM '2022-01-17 11:11:11') ; # 11

FROM_DAYS(N)

计算从 0000 年 1 月 1 日开始 N 天后的日期。

HOUR(time)

返回 time 中的小时值。

MINUTE(time)

返回 time 中的分钟值。

SECOND(time)

返回 time 中的秒值。

LAST_DAY(date)

返回给定日期的那一月份的最后一天。

LOCALTIME()

返回当前日期和时间。

LOCALTIMESTAMP()

返回当前日期和时间

MAKEDATE(year,dayofyear)

基于给定参数年份 year 和所在年中的天数序号 dayofyear 返回一个日期

SELECT MAKEDATE(2022, 3); # 2022-01-03

MAKETIME(hour,minute,second)

组合时间,参数分别为小时、分钟、秒。

MICROSECOND(expr)

返回日期参数所对应的微秒数。

SELECT MICROSECOND("2022-01-17 09:34:00.000023"); # 23

MONTHNAME(date)

返回日期当中的月份名称,如 November。

MONTH(date)

返回日期 date 中的月份值,1 到 12。

NOW()

返回当前日期和时间。

PERIOD_ADD(P,N)

为 年月 组合日期添加一个时段。

SELECT PERIOD_ADD(201201, 5); # 201206

PERIOD_DIFF(P1,P2)

返回两个时段之间的月份差值。

SELECT PERIOD_DIFF(202201, 202203); # -2

QUARTER(date)

返回日期 date 是第几季节,返回 1 到 4。

SEC_TO_TIME(seconds)

将以秒为单位的时间 seconds 转换为时分秒的格式。

STR_TO_DATE(str,format)

将字符串转变为日期。

SUBDATE(expr,days)

日期 expr 减去 n 天后的日期。

SUBTIME(expr1,expr2)

时间 expr1减去 expr2 秒的时间。

SELECT SUBTIME('2022-1-15 11:11:11', 5); # 2022-01-15 11:11:06

SYSDATE()

返回当前日期和时间。

TIME(expr)

提取传入表达式的时间部分。

TIME_FORMAT(time,format)

按表达式 format 的要求显示时间 time。

TIME_TO_SEC(time)

将时间 time 转换为秒。

TIMEDIFF(expr1,expr2)

计算时间差值。

TIMESTAMP(expr1,expr2)

单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和。

TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)

计算时间差,返回 datetime_expr2 − datetime_expr1 的时间差。

TO_DAYS(date)

计算日期 date 距离 0000 年 1 月 1 日的天数。

WEEK(date)

计算日期 date 是本年的第几个星期,范围是 0 到 53。

WEEKDAY(date)

日期 date 是星期几,0 表示星期一,1 表示星期二。

WEEKOFYEAR(date)

计算日期 date 是本年的第几个星期,范围是 0 到 53。

YEAR(date)

返回年份。

YEARWEEK(date,mode)

返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推。

高级函数

BIN(x)

返回 x 的二进制编码。

BINARY(s)

将字符串 s 转换为二进制字符串。

CASE和when

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

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

CAST(x AS type)

转换数据类型。

COALESCE(expr1, expr2, ...., expr_n)

返回参数中的第一个非空表达式(从左向右)。

CONNECTION_ID()

返回唯一的连接 ID。

IF(expr,v1,v2)

如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。

IFNULL(v1,v2)

如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。

ISNULL(expression)

判断表达式是否为 NULL。

LAST_INSERT_ID()

返回最近生成的 AUTO_INCREMENT 值。

NULLIF(expr1, expr2)

比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1。

0

评论区