【MySQL笔记】函数

显示当前服务器版本

select version();

显示当前用户

select user();

显示当前用户打开的数据库

select database();

连接id

select connection_id();

最后插入记录id

select last_insert_id();

被影响的记录总数

select row_count();

返回字符串value自变量的字符集

CHARSET(value)

返回字符串value的比较规则

COLLATION(value) 

字符串函数

字符连接

select concat('a','b');

使用指定分隔符连接

select concat_ws('-','a','b');

数字格式话

select format(20.25,1);

转小写

select lower('MYSQL');

转大写

select upper('mysql');

左截取

select left('mysql',2);

右截取

select right('mysql',2);

获取字符串长度

select length('mysql');

删除左空格

select ltrim(' mysql');

删除右空格

select rtrim('mysql ');

删除左右空格

select trim('     mysql ');

左填充
用字符串pad对str的左边进行填充,达到n个字符串长度

LPAD(str, n, pad)

案例:

select LPAD('12345', 10, 'a')

结果:aaaaa12345
右填充
用字符串pad对str的右边进行填充,达到n个字符串长度

RPAD(str, n, pad)

替换字符

select replace('-my-sql','-','+');

截取字符

select substring('mysql',1,2);

数学函数

进一取整

select ceil(3.99);

去尾取整

select floor(3.01);

整数除法

select 5 div 3;

取余数

select 5 mod 3;

幂运算

select power(2,8);

四舍五入

select round(3.56,1);

数字截取

select truncate(20.235,2);

平均值

select avg(age);

总数

select count(age);

最大值

select max(age);

最小值

select min(age);

和值

select sum(age);

随机数
0-1以内的随机数

RAND() 

日期函数

获取当前日期、时间

  • CURDATE() ,CURRENT_DATE() 返回当前日期,只包含年、月、日
  • CURTIME() , CURRENT_TIME() 返回当前时间,只包含时、分、秒
  • NOW() / SYSDATE() / CURRENT_TIMESTAMP() / LOCALTIME() /LOCALTIMESTAMP() 返回当前系统日期和时间
  • UTC_DATE() 返回UTC(世界标准时间)日期
  • UTC_TIME() 返回UTC(世界标准时间)时间
SELECT NOW(),CURDATE(),CURTIME(),UTC_DATE(),UTC_TIME();

获取月份、星期、星期数、天数等函数

  • YEAR(date) / MONTH(date) / DAY(date) 返回具体的日期值
  • HOUR(time) / MINUTE(time) / SECOND(time) 返回具体的时间值
  • MONTHNAME(date) 返回月份:January,...
  • DAYNAME(date) 返回星期几:MONDAY,TUESDAY.....SUNDAY
  • WEEKDAY(date) 返回周几,注意,周1是0,周2是1,。。。周日是6
  • QUARTER(date) 返回日期对应的季度,范围为1~4
  • WEEK(date) , WEEKOFYEAR(date) 返回一年中的第几周
  • DAYOFYEAR(date) 返回日期是一年中的第几天
  • DAYOFMONTH(date) 返回日期位于所在月份的第几天
  • DAYOFWEEK(date) 返回周几,注意:周日是1,周一是2,。。。周六是7
  • EXTRACT(type FROM date) 返回指定日期中特定的部分,type指定返回的值
SELECT EXTRACT(MINUTE FROM NOW()),EXTRACT( WEEK FROM NOW())

日期与时间戳转换

  • UNIX_TIMESTAMP() 以UNIX时间戳的形式返回当前时间。SELECT UNIX_TIMESTAMP() ->1634348884
  • UNIX_TIMESTAMP(date) 将时间date以UNIX时间戳的形式返回。
  • FROM_UNIXTIME(timestamp) 将UNIX时间戳的时间转换为普通格式的时间
SELECT UNIX_TIMESTAMP(),UNIX_TIMESTAMP(now()),FROM_UNIXTIME(1692257689)

时间和秒钟转换

  • TIME_TO_SEC(time) 将 time 转化为秒并返回结果值。转化的公式为: 小时3600+分钟60+秒
  • SEC_TO_TIME(seconds) 将 seconds 描述转化为包含小时、分钟和秒的时间
SELECT TIME_TO_SEC(NOW()),SEC_TO_TIME(78774);

时间和日期计算

  • DATE_ADD(datetime, INTERVAL expr type),ADDDATE(date,INTERVAL expr type)返回与给定日期时间相差INTERVAL时间段的日期时间
  • DATE_SUB(date,INTERVAL expr type),SUBDATE(date,INTERVAL expr type)返回与date相差INTERVAL时间间隔的日期

type可选值:

select date_add('2015-2-12',interval -365 day);
  • ADDTIME(time1,time2)返回time1加上time2的时间。当time2为一个数字时,代表的是秒 ,可以为负数
  • SUBTIME(time1,time2)返回time1减去time2后的时间。当time2为一个数字时,代表的是 秒 ,可以为负数
  • DATEDIFF(date1,date2) 返回date1 - date2的日期间隔天数
  • TIMEDIFF(time1, time2) 返回time1 - time2的时间间隔
  • FROM_DAYS(N) 返回从0000年1月1日起,N天以后的日期
  • TO_DAYS(date) 返回日期date距离0000年1月1日的天数
  • LAST_DAY(date) 返回date所在月份的最后一天的日期
  • MAKEDATE(year,n) 针对给定年份与所在年份中的天数返回一个日期
  • MAKETIME(hour,minute,second) 将给定的小时、分钟和秒组合成时间并返回
  • PERIOD_ADD(time,n) 返回time加上n后的时间

查询 7 天内的新增用户数有多少?

SELECT COUNT(*) as num FROM new_user WHERE TO_DAYS(NOW())-TO_DAYS(regist_time)<=7

日期的格式化与解析

  • DATE_FORMAT(date,fmt) 按照字符串fmt格式化日期date值
  • TIME_FORMAT(time,fmt) 按照字符串fmt格式化时间time值
  • GET_FORMAT(date_type,format_type) 返回日期字符串的显示格式
  • STR_TO_DATE(str, fmt) 按照字符串fmt对str进行解析,解析为一个日期

fmt可选值:

流程函数

如果value为true,则返回t,否则返回f

IF(value, t, f)

如果value1不为空,返回value1,否则返回value2

IFNULL(value1, value2)

如果val1为true,返回res1,… 否则返回default默认值

CASE WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

如果expr的值等于val1,返回res1,… 否则返回default默认值

CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] … ELSE [ default ] END

加密与解密函数

  • PASSWORD(str)返回字符串str的加密版本,41位长的字符串。加密结果 不可逆 ,常用于用户的密码加密
  • MD5(str)返回字符串str的md5加密后的值,也是一种加密方式。若参数为NULL,则会返回NULL
  • SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL。 SHA加密算法比MD5更加安全 。
  • ENCODE(value,password_seed) 返回使用password_seed作为加密密码加密value
  • DECODE(value,password_seed) 返回使用password_seed作为加密密码解密value

自定义函数

create function fun_name
returns
{string|int|real|decimal}
routine_body

例(无参数):
CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN DATE_FORMAT(NOW(),'%Y-%m-%d');

例(参数):
CREATE FUNCTION f2(num1 INT , num2 INT)
RETURNS DECIMAL(10,2)
RETURN (num1+num2)/2;

例(复合):
CREATE FUNCTION addusers(username VARCHAR(20))
RETURNS INT
BEGIN
INSERT user (name) VALUES (username);
RETURN LAST_INSERT_ID();
END
$$

函数案例

按天分组

select date_format(PayTime,'%Y-%m-%d 00:00:00') PayTime,count(*) OrderCount from order_master 
where paytime is not null
group by date_format(PayTime,'%Y-%m-%d 00:00:00')

按小时分组

select date_format(PayTime,'%Y-%m-%d %H:00:00') PayTime,count(*) OrderCount from order_master 
where paytime is not null
group by date_format(PayTime,'%Y-%m-%d %H:00:00')

posted @ 2020-07-20 18:01  .Neterr  阅读(129)  评论(0编辑  收藏  举报