MySQL 常用函数(二)

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,FALSENULL,这三个值之一。

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 不允许在 THENELSE 子句中使用空的命令。 如果您不想处理 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(
))

CAST函数:进行数据格式转换

CAST函数:进行数据格式转换

//语法表达式
CAST(expr AS type)

expr:任何有效的SQServer表达式。
AS:用于分隔两个参数,在AS之前的是要处理的数据,在AS之后是要转换的数据类型。
type:目标系统所提供的数据类型。

示例:

SELECT CONCAT(CAST(p.price AS DECIMAL(15,2)),'%') AS PricePercent  FROM Persons p

结果
在这里插入图片描述

DECIMAL函数:数字处理

语法:
DECIMAL(a,b)

a:指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38;通俗来讲就是左右两边相加总共最多可以展现的数字位数。
b:指定小数点右边可以存储的十进制数字的最大个数,小数位数必道须是从 0 到 a之间版的值,默认小数位数是 0。通俗讲就是小数点后面的数字展现的最大的位数。
注意:数字展现的最大的位数,不是保留的位数哟,如果没有那么多位数就展现当前的数字就行,不需要强行补位数。

比如说:
(1)有一个数字是123456789.12345
如果用decimal(10,1) 展现结果为:123456789.1
如果用decimal(11,2) 展现结果为:123456789.12
如果用decimal(10,2) 展现结果为:99999999.99 (因为损失精度了。要求总共左右两边只能最多有10位,前面已经有9位数字了,后面就只能再有一位数字,可是要求后面还得保留2位,所以就只能在规定的要求中损失精度保留最大值了)
(2)有一个数字是123
如果用decimal(3,2) 展现结果为123
如果用decimal(10,1) 展现结果为123
如果用decimal(9,2) 展现结果为123
如果用decimal(2,2) 展现结果为0.99

LIMIT函数:提取前几条或者中间某几行数据

//语法
LIMIT n,m
//其中m是指记录开始的index,从0开始,表示第一条记录;n是指从m+1条开始,取n条。
select * from table LIMIT m,n;
//即取出第3条至第6条,4条记录。
select * from table LIMIT 2, 4;
//取前五个:
LIMIT 0, 5;等同于LIMIT 5;

注意:limit不通用,是mysql特有的,其他数据库中没有;limit是sql语句最后执行的一个环节。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值