ABS函数:求绝对值
绝对值函数 ABS(x)
返回 x 的绝对值。正数的绝对值是其本身,负数的绝对值为其相反数,0 的绝对值是 0。
SELECT ABS(5),ABS(-2.4),ABS(-24),ABS(0);
SQRT函数:求二次方根S
平方根函数 SQRT(x)
返回非负数 x 的二次方根。负数没有平方根,返回结果为 NULL
。
SELECT SQRT(25),SQRT(120),SQRT(-9);
MOD函数:求余数
求余函数 MOD(x,y)
返回 x 被 y 除后的余数,MOD()
对于带有小数部分的数值也起作用,它返回除法运算后的余数。
SELECT MOD(63,8),MOD(120,10),MOD(15.5,3);
CEIL和CELING函数:向上取整
取整函数 CEIL(x)
和 CEILING(x)
的意义相同,返回不小于 x 的最小整数值,返回值转化为一个 BIGINT
。
SELECT CEIL(-2.5),CEILING(2.5);
FLOOR函数:向下取整
FLOOR(x)
函数返回小于 x 的最大整数值。
SELECT FLOOR(5),FLOOR(5.66),FLOOR(-4),FLOOR(-4.66)
RAND函数:生成随机数
RAND()
函数被调用时,可以产生一个在 0 和 1 之间的随机数。
SELECT RAND(), RAND(), RAND()
ROUND函数:四舍五入
ROUND(x) 函数返回最接近于参数 x 的整数;ROUND(x,y)
函数对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位。
SELECT ROUND(-6.6),ROUND(-8.44),ROUND(3.44)
SIGN函数:返回参数的符号
符号函数 SIGN(x)
返回参数的符号,x 的值为负、零和正时返回结果依次为 -1、0 和 1。
SELECT SIGN(-6),SIGN(0),SIGN(34)
POW和POWER函数:求次方
POW(x,y)
函数和 POWER(x,y)
函数用于计算 x 的 y 次方。
SELECT POW(5,-2),POW(10,3),POW(100,0),POWER(4,3),POWER(6,-3)
SIN函数:求正弦值
正弦函数 SIN(x)
返回 x 的正弦值,其中 x 为弧度值。
SELECT SIN(1),SIN(0.5*PI())
ASIN函数:求反正弦值
反正弦函数 ASIN(x)
返回 x 的反正弦值,若 x 不在 -1 到 1 的范围之内,则返回 NULL。
SELECT ASIN(0.8414709848078965),ASIN(2)
COS函数:求余弦值
余弦函数 COS(x)
返回 x 的余弦值,x 为弧度值。
SELECT COS(1),COS(0),COS(PI())
ACOS函数:求反余弦值
反余弦函数 ACOS(x)
。x 值的范围必须在 -1 和 1 之间,否则返回 NULL。
SELECT ACOS(2),ACOS(1),ACOS(-1)
TAN函数:求正切值
正切函数 TAN(x)
返回 x 的正切值,x 为给定的弧度值。
SELECT TAN(1),TAN(0)
ATAN函数:求反正切值
反正切 ATAN(x)
返回 x 的反正切值,正切为 x 的值。
SELECT ATAN(1.5574077246549023),ATAN(0)
COT函数:求余切值
余切函数 COT(x)
返回 x 的余切值,x 是给定的弧度值。
SELECT COT(1)
LENGTH函数:获取字符串长度
LENGTH(str)
函数的返回值为字符串的字节长度,使用 uft8
(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节。
SELECT LENGTH('name'),LENGTH('数据库')
CONCAT函数:字符串拼接
CONCAT(sl,s2,...)
函数返回结果为连接参数产生的字符串,或许有一个或多个参数。
若有任何一个参数为 NULL
,则返回值为 NULL
。若所有参数均为非二进制字符串,则结果为非二进制字符串。若自变量中含有任一二进制字符串,则结果为一个二进制字符串。
SELECT CONCAT('MySQL','5.7'),CONCAT('MySQL',NULL)
INSERT函数:替换字符串
替换字符串函数 INSERT(s1,x,len,s2)
返回字符串 s1,子字符串起始于 x 位置,并且用 len 个字符长的字符串代替 s2。
若 x 超过字符串长度,则返回值为原始字符串。假如 len 的长度大于其他字符串的长度,则从位置 x 开始替换。若任何一个参数为 NULL,则返回值为 NULL。
SELECT INSERT('Football',2,4,'Play') AS col1,
-> INSERT('Football',-1,4,'Play') AS col2,
-> INSERT('Football',3,20,'Play') AS col3;
LOWER函数:将字母转换成小写
字母小写转换函数 LOWER(str)
可以将字符串 str 中的字母字符全部转换成小写。
SELECT LOWER('BLUE'),LOWER('Blue')
UPPER函数:将字母转换成大写
字母大写转换函数 UPPER(str)
可以将字符串 str 中的字母字符全部转换成大写。
SELECT UPPER('green'),UPPER('Green')
LEFT函数:从左侧截取字符串
LEFT(s,n)
函数返回字符串 s 最左边的 n 个字符。
SELECT LEFT('MySQL',2)
RIGHT函数:从右侧截取字符串
RIGHT(s,n)
函数返回字符串 s 最右边的 n 个字符。
SELECT RIGHT('MySQL',3)
TRIM函数:删除空格
删除空格函数 TRIM(s)
删除字符串 s 两侧的空格。
SELECT '[ mobile ]',CONCAT('[',TRIM(' mobile '),']')
REPLACE函数:字符串替换
替换函数 REPLACE(s,s1,s2)
使用字符串 s2 替换字符串 s 中所有的字符串 s1。
SELECT REPLACE('aaa.mysql.com','a','w')
STR_TO_DATE函数:函数是将时间格式的字符串
STR_TO_DATE(str,format)
函数是将时间格式的字符串(str),按照所提供的显示格式(format)转换为DATETIME
类型的值。
SELECT STR_TO_DATE('2017-01-06 10:20:30','%Y-%m-%d %H:%i:%s') AS result;
SUBSTRING函数:截取字符串
该函数等同于SUBSTR(s,n,len)
,获取子串函数 SUBSTRING(s,n,len)
带有 len 参数的格式,从字符串 s 返回一个长度同 len 字符相同的子字符串,起始于位置 n。
也可能对 n 使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的第 n 个字符,即倒数第 n 个字符,而不是字符串的开头位置。
SELECT SUBSTRING('computer',3) AS col1,
-> SUBSTRING('computer',3,4) AS col2,
-> SUBSTRING('computer',-3) AS col3,
-> SUBSTRING('computer',-5,3) AS col4
REVERSE函数:反转字符串
字符串逆序函数 REVERSE(s)
可以将字符串 s 反转,返回的字符串的顺序和 s 字符串的顺序相反。
SELECT REVERSE('hello')
CURDATE和CURRENT_DATE函数:获取系统当前日期
CURDATE()
和 CURRENT_DATE()
函数的作用相同,将当前日期按照“YYYY-MM-DD”或“YYYYMMDD”格式的值返回,具体格式根据函数用在字符串或数字语境中而定。
SELECT CURDATE(),CURRENT_DATE(),CURRENT_DATE()+0
CURTIME和CURRENT_TIME函数:获取系统当前时间
CURTIME()
和 CURRENT_TIME()
函数的作用相同,将当前时间以“HH:MM:SS”或“HHMMSS”格式返回,具体格式根据函数用在字符串或数字语境中而定。
SELECT CURTIME(),CURRENT_TIME(),CURRENT_TIME()+0
NOW和SYSDATE函数:获取当前时间日期
NOW()
和 SYSDATE()
函数的作用相同,都是返回当前日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”,具体格式根据函数用在字符串或数字语境中而定。
SELECT NOW(),SYSDATE()
虽然在 MySQL 中 NOW()
和 SYSDATE()
都表示当前时间,但是 NOW()
取的是语句开始执行的时间,而 SYSDATE()
取的是语句执行过程中动态的实时时间。
SELECT NOW(),sysdate(),sleep(3),NOW(),sysdate()
UNIX_TIMESTAMP函数:获取UNIX时间戳
UNIX_TIMESTAMP(date)
若无参数调用,返回一个无符号整数类型的 UNIX 时间戳('1970-01-01 00:00:00’GMT之后的秒数)。
若用 date 来调用 UNIX_TIMESTAMP()
,它会将参数值以’1970-01-01 00:00:00’GMT后的秒数的形式返回。
SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(NOW()),NOW()
FROM_UNIXTIME函数:时间戳转日期
FROM_UNIXTIME(date)
函数把 UNIX 时间戳转换为普通格式的日期时间值,与 UNIX_TIMESTAMP () 函数互为反函数。
SELECT FROM_UNIXTIME(1150051270)
MONTH函数:获取指定日期的月份
MONTH(date)
函数返回指定 date 对应的月份,范围为 1~12。
SELECT MONTH('2017-12-15')
MONTHNAME函数:获取指定日期月份的英文名称
MONTHNAME(date)
函数返回日期 date 对应月份的英文全名。
SELECT MONTHNAME('2017-12-15')
DAYNAME函数:获取指定日期的星期名称
DAYNAME(date)
函数返回 date 对应的工作日英文名称,例如 Sunday、Monday 等。
SELECT DAYNAME('2006-06-12')
DAYOFWEEK函数:获取日期对应的周索引
DAYOFWEEK(d)
函数返回 d 对应的一周中的索引(位置)。1 表示周日,2 表示周一,……,7 表示周六。这些索引值对应于ODBC标准。
SELECT DAYOFWEEK('2017-12-15')
WEEK函数:获取指定日期是一年中的第几周
WEEK()
函数计算日期 date 是一年中的第几周。WEEK(date,mode)
函数允许指定星期是否起始于周日或周一,以及返回值的范围是否为 0~52 或 1~53。
WEEK函数接受两个参数:
date是要获取周数的日期。
mode是一个可选参数,用于确定周数计算的逻辑。
如果忽略 mode 参数,默认情况下 WEEK
函数将使用 default_week_format
系统变量的值。要获取 default_week_format
变量的当前值,请使用 SHOW VARIABLES
语句如下:
SHOW VARIABLES LIKE 'default_week_format'
使用 WEEK(date)
函数查询指定日期是一年中的第几周。
SELECT WEEK('2018-10-25',1)
DAYOFYEAR函数:获取指定日期在一年中的位置
DAYOFYEAR(d)
函数返回 d 是一年中的第几天,范围为 1~366。
SELECT DAYOFYEAR('2017-12-15')
DAYOFMONTH函数:获取指定日期在一个月的位置
DAYOFMONTH(d)
函数返回 d 是一个月中的第几天,范围为 1~31。
SELECT DAYOFMONTH('2017-12-15')
YEAR函数:获取年份
YEAR()
函数可以从指定日期值中来获取年份值。YEAR()
函数返回的年份值范围为 1000 到 9999,如果日期为零,YEAR()
函数返回 0。
SELECT YEAR(NOW())
TIME_TO_SEC函数:将时间转换为秒值
TIME_TO_SEC(time)
函数返回将参数 time 转换为秒数的时间值,转换公式为“小时 ×3600+ 分钟 ×60+ 秒”。
SELECT TIME_TO_SEC('15:15:15')
SEC_TO_TIME函数:将秒值转换为时间格式
SEC_TO_TIME(seconds)
函数返回将参数 seconds 转换为小时、分钟和秒数的时间值。
SELECT SEC_TO_TIME('54925')
DATE_ADD和ADDDATE函数:向日期添加指定时间间隔
DATE_ADD(date,INTERVAL expr type)
和 ADDDATE(date,INTERVAL expr type)
两个函数的作用相同,都是用于执行日期的加运算。
DATE_ADD()
和 ADDDATE()
函数有两个参数:
date 是 DATE 或 DATETIME 的起始值。
INTERVAL expr type是要添加到起始日期值的间隔值。
SELECT DATE_ADD('2018-10-31 23:59:59',INTERVAL 1 SECOND) AS C1,
-> DATE_ADD('2018-10-31 23:59:59',INTERVAL '1:1' MINUTE_SECOND) AS C2,
-> ADDDATE('2018-10-31 23:59:59',INTERVAL 1 SECOND) AS C3
SELECT ADDDATE('2017-11-30 23:59:59', INTERVAL 1 SECOND) AS col1,
-> ADDDATE('2017-11-30 23:59:59' ,INTERVAL '1:1' MINUTE_SECOND) AS col2
DATE_SUB和SUBDATE函数:日期减法运算
DATE_SUB(date,INTERVAL expr type)
和 SUBDATE(date,INTERVAL expr type)
两个函数作用相同,都是执行日期的减法运算。
DATE_SUB()
和 SUBDATE()
函数接受两个参数:
date 是 DATE 或 DATETIME 的起始值。
expr 是一个字符串,用于确定从起始日期减去的间隔值。type 是 expr 可解析的间隔单位,例如 DAY,HOUR 等
SELECT DATE_SUB('2018-01-02',INTERVAL 31 DAY) AS C1,
-> SUBDATE('2018-01-02',INTERVAL 31 DAY) AS C2,
-> DATE_SUB('2018-01-01 00:01:00',INTERVAL '0 0:1:1' DAY_SECOND) AS C3
提示:DATE_ADD(date,INTERVAL expr type)
和 DATE_SUB(date,INTERVAL expr type)
函数在指定加减的时间段时也可以指定负值,加法的负值即返回原始时间之前的日期和时间,减法的负值即返回原始时间之后的日期和时间。
ADDTIME函数:时间加法运算
ADDTIME(time,expr)
函数用于执行时间的加法运算。添加 expr 到 time 并返回结果。
其中:time 是一个时间或日期时间表达式,expr 是一个时间表达式。
SELECT ADDTIME('2018-10-31 23:59:59','0:1:1'),
-> ADDTIME('10:30:59','5:10:37')
SUBTIME函数:时间减法运算
SUBTIME(time,expr)
函数用于执行时间的减法运算。
其中:函数返回 time。expr 表示的值和格式 time 相同。time 是一个时间或日期时间表达式, expr 是一个时间。
SELECT SUBTIME('2018-10-31 23:59:59','0:1:1'),SUBTIME('10:30:59','5:12:37')
DATEDIFF函数:获取两个日期的时间间隔
DATEDIFF(date1,date2)
返回起始时间 date1 和结束时间 date2 之间的天数。date1 和 date2 为日期或 date-and-time 表达式。计算时只用到这些值的日期部分。
SELECT DATEDIFF('2017-11-30','2017-11-29') AS COL1,
-> DATEDIFF('2017-11-30','2017-12-15') AS col2
WEEKDAY函数:获取指定日期在一周内的索引位置
WEEKDAY(d)
返回 d 对应的工作日索引。0 表示周一,1 表示周二,……,6 表示周日。
SELECT WEEKDAY('2017-12-15')
DATE_FORMAT函数:格式化指定的日期
MAX函数:查询指定列的最大值
MIN函数:查询指定列的最小值
SUM函数:求和
COUNT函数:统计查询结果的行数
AVG函数:求平均值
详细查看 《MySQL 函数(一)》 传动门
IF函数:判断
IF
语句允许您根据表达式的某个条件或值结果来执行一组 SQL 语句。
要在 MySQL 中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合。表达式可以返回 TRUE
,FALSE
或 NULL
,这三个值之一。
SELECT IF(1<2,1,0) c1,IF(1>5,'√','×') c2,IF(STRCMP('abc','ab'),'yes','no') c3
IFNULL函数:判断是否为空
IFNULL
函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL
,则返回第一个参数。 否则,IFNULL
函数返回第二个参数。两个参数可以是文字值或表达式。
SELECT IFNULL(5,8),IFNULL(NULL,'OK'),IFNULL(SQRT(-8),'FALSE'),SQRT(-8)
CASE函数:搜索语句
除了 IF
函数,MySQL 还提供了一个替代的条件语句 CASE
。 MySQL CASE
语句使代码更加可读和高效。
CASE
语句有两种形式:简单的和可搜索 CASE
语句。
简单的 CASE 语句
简单的 CASE
语句就是指使用简单 CASE
语句来检查表达式的值与一组唯一值的匹配。
简单的 CASE
语句的语法:
CASE <表达式>
WHEN <值1> THEN <操作>
WHEN <值2> THEN <操作>
...
ELSE <操作>
END CASE;
其中:<表达式> 可以是任何有效的表达式。我们将 <表达式> 的值与每个 WHEN
子句中的值进行比较,例如 <值1>,<值2> 等。如果 <表达式> 和 <值n> 的值相等,则执行相应的 WHEN
分支中的命令 <操作>。如果 WHEN
子句中的 <值n> 没有与 <表达式> 的值匹配,则 ELSE
子句中的命令将被执行。ELSE
子句是可选的。 如果省略 ELSE
子句,并且找不到匹配项,MySQL 将引发错误。
SELECT CASE WEEKDAY(NOW()) WHEN 0 THEN '星期一' WHEN 1 THEN '星期二' WHEN
2 THEN '星期三' WHEN 3 THEN '星期四' WHEN 4 THEN '星期五' WHEN 5 THEN '星期六'
ELSE '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW())
可搜索的 CASE 语句
简单 CASE
语句仅允许将表达式的值与一组不同的值进行匹配。 为了执行更复杂的匹配,如范围,则可以使用可搜索 CASE
语句。 可搜索 CASE
语句等同于 IF
语句,但是它的构造更加可读。
可搜索CASE语句的语法:
CASE
WHEN <条件1> THEN <命令>
WHEN <条件2> THEN <命令>
...
ELSE commands
END CASE;
MySQL 分别计算 WHEN
子句中的每个条件,直到找到一个值为 TRUE
的条件,然后执行 THEN
子句中的相应 <命令>。如果没有一个条件为 TRUE
,则执行 ELSE
子句中的 <命令>。如果不指定 ELSE
子句,并且没有一个条件为 TRUE
,MySQL 将发出错误消息。MySQL 不允许在 THEN
或 ELSE
子句中使用空的命令。 如果您不想处理 ELSE
子句中的逻辑,同时又要防止 MySQL 引发错误,则可以在 ELSE 子句中放置一个空的 BEGIN END
块。
SELECT CASE WHEN WEEKDAY(NOW())=0 THEN '星期一' WHEN WEEKDAY(NOW())=1 THE
N '星期二' WHEN WEEKDAY(NOW())=2 THEN '星期三' WHEN WEEKDAY(NOW())=3 THEN '星期
四' WHEN WEEKDAY(NOW())=4 THEN '星期五' WHEN WEEKDAY(NOW())=5 THEN '星期六' WHEN
WEEKDAY(NOW())=6 THEN '星期天' END AS COLUMN1,NOW(),WEEKDAY(NOW()),DAYNAME(NOW(
))