MySQL-相关函数

1、时间日期函数转换

/**获取日期时间**/
# 返回当前时间 年月日 yyyy-MM-dd
select curdate(), current_date();

# 返回当前时间 时分秒 HH:mm:ss
select curtime(), current_time();

# 返回当前系统日期和时间 yyyy-MM-dd HH:mm:ss
select now(), sysdate(), current_timestamp(), localtime(), localtimestamp();

# 返回UTC 世界标准时间 日期
select UTC_DATE();

# 返回UTC 世界标准时间 时间
select UTC_TIME();

/**日期与时间戳的转换**/
# 以unix时间戳的形式返回当前时间
select unix_timestamp();
# 将时间date 以 unix时间戳的形式返回
select unix_timestamp(now());
# 将unix时间戳的时间转换为普通格式的时间
select from_unixtime(1711552123);

/***获取月份、星期、星期数、天数等函数*/
# 返回具体日期值
select year(now()),MONTH(curdate()),DAY(curtime());
#返回具体时间值
select HOUR(now()),MINUTE(current_time),SECOND(curtime());
# 返回月份
select MONTHNAME(now());
# 返回星期几
select weekday(now()) +1;
# 返回日期对应嫉妒
select quarter(curdate());
# 返回一年中的第几周
select week(now()),weekofyear(now());
# 返回一年中的第几天
select dayofyear(now());
# 返回一月中的第几天
select dayofmonth(curdate());
# 返回一周中的第几天
select dayofweek(curdate()) -1;

/**日期操作函数**/
# extract(type from date) 返回指定日期的特定部分,type值返回的值
select cast(extract(year_month from now()) as char);

/**时间和秒钟转换的函数**/
# 将time 转换为 秒 并返回结果
select TIME_TO_SEC(current_time);
# 将 秒转换为 包含 小时 分钟 秒的时间
select sec_to_time(3600);

/***计算日期与时间*/
# type: hour minute second year month day  year_month  day_hour day_minute day_second hour_minute hour_second
#返回给定日期时间相差interval时间段的日期时间  data_add(datatime,interval expr type)
select date_add(now(),interval 1 day),adddate(now(),interval '1_1' year_month );
#返回与date相差interval时间段的日期时间  data_sub(datatime,interval expr type)
select date_sub(now(),interval 1 day),subdate(now(),interval 1 month );

# 返回time1 + time2 的时间,当time2为一个数字时,代表秒,可以为负数
select addtime(4,5);
# 返回time1 - time2 的时间,当time2为一个数字时,代表秒,可以为负数
select subtime(4,5);
#返回data1 -data2 的日期的间隔天数
select datediff(now(),adddate(now(),interval -1 day ));
#返回time1 - time2 的时间间隔
select timediff(current_time(),subtime(current_time(),-1 ));
# 距离从0000年1月1日起,N天后的日期
select from_days(1000);
# 返回日期date距离0000年1月1日 的天数
select to_days(now());
# 返回data所在月份的最后一天日期
select last_day(concat_ws('-','2024-03','01'));
# 针对给定年份与所在年份中的天数返回一个日期
select makedate(year(now()),1);
# 针对给定的小时、分钟、秒 组合时间并返回
select maketime(hour(now()),minute(subdate(now(),interval 1 minute )),4);
# 返回time加上 n 后的时间
select period_add(current_time,5);


/**日期格式化和解析**/
# 格式化: 日期 ---》 字符串
# 按照字符串格式 fmt格式化日期 date 的值  date_format(date,fmt)
select date_format(now(),'%Y-%m');
# 按照字符串格式 fmt格式化日期 time 的值  time_format(time,fmt)
select time_format(current_time(),'%H');

# 解析:   字符串 ---》 日期
# 按照字符串格式 fmt 对 str 进行解析,解析为一个 日期  str_to_date(str,fmt)
select str_to_date('2023-12-01','%Y-%m-%d');

#     %Y              4位数字表示年份
#     %y              表示两位数字表示年份
#     %M              月名表示月份(January,....)
#     %m              两位数字表示月份(01,02,03。。。)
#     %b              缩写的月名(Jan.,Feb.,....)
#     %c              数字表示月份(1,2,3,...)
#     %D              英文后缀表示月中的天数(1st,2nd,3rd,...)
#     %d              两位数字表示月中的天数(01,02...)
#     %e              数字形式表示月中的天数(1,2,3,4,5.....)
#     %H              两位数字表示小数,24小时制(01,02..)
#     %h和%I          两位数字表示小时,12小时制(01,02..)
#     %k              数字形式的小时,24小时制(1,2,3)
#     %l              数字形式表示小时,12小时制(1,2,3,4....)
#     %i              两位数字表示分钟(00,01,02)
#     %S和%s           两位数字表示秒(00,01,02...)
#     %W              一周中的星期名称(Sunday...)
#     %a              一周中的星期缩写(Sun.,Mon.,Tues.,..)
#     %w              以数字表示周中的天数(0=Sunday,1=Monday....)
#     %j              以3位数字表示年中的天数(001,002...)
#     %U              以数字表示年中的第几周,(1,2,3。。)其中Sunday为周中第一天
#     %u              以数字表示年中的第几周,(1,2,3。。)其中Monday为周中第一天
#     %T              24小时制
#     %r              12小时制
#     %p              AM或PM
#     %%              表示%

2、流程控制函数

/**流程控制函数**/

# if(value,value1,value2) value 为 true 则value1 否则 value2
select if(1<0,true,false) from dual;

# ifnull(value1,value2) value1 为null1 ,则value2
select ifnull(null,true),ifnull(true,false) from dual;

# case expr when expr1 then value1 when expr2 then value2 else value3 end   理解为swich···case··· 语句
select case '2' when  '3' then true  when '4' then false else current_time() end from dual;

#case when expr then value when expr1 then value1 else value3 end  理解为 if···else if···else···
select case when 1<0 then true else '2'  end  from dual;

3、加密·解密函数

/**加密·解密 用于对数据库中的数据进行相关处理**/

# PASSWORD(str) 返回 str 加密字符 长度41 加密结果不可逆,若为 null 则 返回 空串    mysql8 中弃用
select password('123456'),password(null);

#MD5(str) 若参数为空,这返回 null   加密不可逆
select MD5('1234'),MD5(null);

#SHA(str) 当参数为null 则 返回null 比 MD5 更安全
select SHA('234');

# ENCODE(value ,password_seed) 返回使用 password_seed 作为加密密码 加密 value
select ENCODE('123456' ,'mysql');

#DECODE(value,password_seed) 返回使用password_seed 作为加密密码 解密 value   与DECODE函数互为反函数
select  DECODE(ENCODE('123456' ,'mysql'),'mysql');

4、内置信息函数

/**内置查询MYSQL信息的函数**/

# 查看数据库版本号
SELECT VERSION();

# 返回MYSQL服务器连接数
SELECT CONNECTION_ID();

# 返回SQL命令当前所在数据库
SELECT DATABASE(),SCHEMA();

# 返回当前连接用户名,返回格式为 ‘主机名@用户名’
SELECT USER(),SYSTEM_USER(),SESSION_USER(),CURRENT_USER();

# 返回字符串VALUE自变量字符集 CHARSET(VALUE)
SELECT CHARSET('AS');

# 返回字符串VALUE的比较规则   COLLATION(VALUE)
SELECT COLLATION('ASS')

5、聚合函数

# SUM():计算数值列的总和。
select sum(salary) from employees;

# AVG():计算数值列的平均值。
select avg(salary) from employees;

# MAX():返回 任意数据类型 列的最大值。
select max(salary),max(first_name) from employees;

# MIN():返回 任意数据类型 列的最小值。
select min(salary),max(first_name) from employees;

# COUNT():返回指定列的行数或满足条件的行数。 Innodb引擎的表用count(*),count(1)直接读行数,复杂度是O(n),效率大于具体的count(列名)。
# COUNT(*)返回表中记录总数,适用于任意数据类型。 COUNT(expr) 返回expr不为空的记录总数。
select count(*) ,count(manager_id) ,count(1) from employees;

# GROUP_CONCAT():将查询结果中的多个行合并成一个字符串,并用指定的分隔符分隔。
select group_concat(first_name separator '-') from employees;

# STD():计算样本标准差。
SELECT STD(salary) FROM employees;

# STDDEV_POP():计算总体标准差。
SELECT STDDEV_POP(salary) FROM employees;

# STDDEV_SAMP():计算样本标准差。
SELECT STDDEV_SAMP(salary) FROM employees;

# VARIANCE():计算总体方差。
SELECT VARIANCE(salary) FROM employees;

# VAR_POP():计算总体方差。
SELECT VAR_POP(salary) FROM employees;

# VAR_SAMP():计算样本方差。
SELECT VAR_SAMP(salary) FROM employees;

# BIT_AND():对指定列的所有值进行按位与运算。  MySQL8支持
SELECT BIT_AND(2,3) FROM dual;

# BIT_OR():对指定列的所有值进行按位或运算。  MySQL8支持
SELECT BIT_OR(2,3) FROM dual;

# BIT_XOR():对指定列的所有值进行按位异或运算。  MySQL8支持
SELECT BIT_XOR(2,3) FROM dual;

6、其他相关函数

# FORMAT(VALUE,N) 返回对数字 VALUE 进行格式化后的结果数据,N表示 四舍五入 后保留到小数 N 位 , 若N <= 0 ,则只保留整数位
SELECT FORMAT(PI(),4),FORMAT(PI(),0);   # 3.14.6    3

#CONV(VALUE ,FROM , TO)     将VALUE 的值进行不同进制之间的转换, FROM 当前进制  TO 目标进制
SELECT CONV(10,10,2);  # 1010

# INET_ATON(IPVALUE)    将以点分隔的IP地址转换为一个数字   计算方式: 192 * 256的3次方 + 168 * 256的2次方 + 4 * 256 + 8
SELECT INET_ATON('192.168.4.8');

# INET_NTOA(VALUE)  将数字形式的IP地址转换为一点分隔的IP地址
SELECT INET_NTOA(3232236552);  #192.168.4.8

# BENCHMARK(N,EXPR) 将表达式EXPR重复执行 N 次,用于测试MYSQL处理EXPR表达式所耗费时间
SELECT BENCHMARK(1000,CURRENT_DATE());

# CONVERT(VALUE USING CHAR_CODE)    将VALUE所使用的字符编码修改为 CHAR_CODE
SELECT CONVERT('RQTANC' USING 'UTF8MB4'),CHARSET('RQTANC');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值