MySQL基础关键_004_DQL(三)
目 录
一、数据处理函数2
1.空处理
2.日期和时间相关
(1)利用 now 和 sysdate 获取当前日期和时间
(2)利用 curdate 或 current_date 获取当前日期
(3)利用 curtime 或 current_time 获取当前时间
(4)获取单独的年、月、日、时、分、秒
(5)利用 date_add 给指定日期添加间隔时间
(6)利用 date_format 日期格式化
(7)利用 str_to_date 将字符串转换为日期类型
(8)判断第几天
(9)利用 last_day 查询给定日期所在月的最后一天日期
(10)利用 datediff 计算两个日期之间相差的天数
(11)利用 timediff 计算两个日期之间相差的时间
3.if
(1)说明
(2)员工薪资高于 3000,输出“标准薪资”,反之输出“较低薪资”
(3)若员工姓名是“SMITH”,薪资上调10%
4.case
(1)为职位是“MARTIN”和“SALESMAN”的员工,薪资分别上调10%和20%
5.cast
(1)说明
(2) 将 3.14 转换为 int 类型
(3)将字符串转换为日期时间类型
(4)浮点型转换
6.加密
一、数据处理函数2
1.空处理
- 利用 ifnull(x, y) 进行空处理。当 x 为 NULL 时,将 x 当作 y 处理;
- 在 SQL 中,凡是有 NULL 参与的数学运算,最终计算结果都是 NULL;
- 实例:查询每个员工的姓名和总收入(总收入 =(月薪 + 津贴)* 12)。注意:部分员工的津贴为 NULL。
select emp_name, (salary + ifnull(commission, 0)) * 12 as total_income from employees;
2.日期和时间相关
(1)利用 now 和 sysdate 获取当前日期和时间
- now():获取执行 select 语句的时刻;
- sysdate():获取执行 sysdate() 函数的时刻。
(2)利用 curdate 或 current_date 获取当前日期
# 1
curdate();# 2
current_date();# 3
current_date;
(3)利用 curtime 或 current_time 获取当前时间
# 1
select curtime();# 2
select current_time();# 3
select current_time;
(4)获取单独的年、月、日、时、分、秒
# 年
select year(now());# 月
select month(now());# 日
select day(now());# 时
select hour(now());# 分
select minute(now());# 秒
select second(now());
(5)利用 date_add 给指定日期添加间隔时间
- 语法格式:【date_add(日期, interval expr 单位);】;
- interval:间隔关键字;
- expr:具体间隔量,一般为数字。可以为负数,若为负数,等同于 date_sub 的效果;
- 单位:
- 年:year;
- 月:month;
- 日:day;
- 时:hour;
- 分:minute;
- 秒:second;
- 微秒:microsecond;
- 周:week;
- 季度:quarter。
- 复合单位:单位除上述九种外,还有许多复合型单位。例如:
- second_microsecond;
- minute_microsecond;
- minute_second;
- hour_minute;
- hour_second;
- hour_microsecond;
- day_microsecond;
- day_second;
- day_minute;
- day_hour;
- year_month。
# 当前日期间隔三天
select date_add(now(), interval 3 day);# 2020-01-01间隔十年
select date_add('2020-01-01', interval 10 year);# 当前日期间隔两年三个月
select date_add(now(), interval '2, 3' year_month);
(6)利用 date_format 日期格式化
- 将日期转换成某种格式的日期格式字符串,date ---> char;
- 语法格式:【date_format(日期, '日期格式');】;
- 日期格式:
- %Y:四位年份;
- %y:两位年份;
- %m:月份;
- %d:日;
- %H:时;
- %i:分;
- %s:秒。
select date_format(now(), '%Y年%m月%d日 %H时%i分%s秒');
(7)利用 str_to_date 将字符串转换为日期类型
语法格式:【str_to_date('日期字符串', '日期格式');】。
select str_to_date('2025/05/01', '%Y/%m/%d');
(8)判断第几天
- dayofweek():一周中的第几天(周日是第一天);
- dayofmonth():一月中的第几天;
- dayofyear():一年中的第几天。
select dayofweek(now());select dayofmonth(now());select dayofyear(now());
(9)利用 last_day 查询给定日期所在月的最后一天日期
select last_day(now());select last_day('2024-12-06');
(10)利用 datediff 计算两个日期之间相差的天数
select datediff(now(), '2027-05-01 21:47:15');select datediff('2027-05-01 21:47:15', now());
(11)利用 timediff 计算两个日期之间相差的时间
select timediff(now(), '2025-05-01 21:49:33');select timediff('2025-05-01 21:49:33', now());
3.if
(1)说明
- 语法格式:【select if(条件, x, y);】;
- 如果条件为 true 返回 x,条件为 false 返回 y。
(2)员工薪资高于 3000,输出“标准薪资”,反之输出“较低薪资”
select emp_name, salary, if(salary >= 3000, '标准薪资', '较低薪资') as assess from employees;
(3)若员工姓名是“SMITH”,薪资上调10%
select emp_name, salary, if(emp_name = 'SMITH', salary * 1.1, salary) as new_salary from employees;
4.case
语法格式:【select case 匹配内容 when 值1 then 结果1 when 值2 then 结果2 else 结果3 end;】。
(1)为职位是“MARTIN”和“SALESMAN”的员工,薪资分别上调10%和20%
select emp_name, job_title, salary, (case job_title when 'MANAGER' then salary * 1.1 when 'SALESMAN' then salary * 1.2 else salary end) as new_salary from employees;
5.cast
(1)说明
- 用于将值从一种数据类型转换为表达式中指定的另一种数据类型;
- 语法格式:【cast (值 as 数据类型);】;
- 数据类型:
- 日期类型:date;
- 时间类型:time;
- 日期时间类型:datetime;
- 有符号 int 类型:signed(符号是正负数);
- 定长字符串类型:char;
- 浮点型:decimal。
(2) 将 3.14 转换为 int 类型
select cast(3.14 as signed);
(3)将字符串转换为日期时间类型
select cast('2025/05/01' as datetime);
(4)浮点型转换
select cast(00520.1314 as decimal(5, 1));
-- decimal(5, 1) 的意思是:保留 5 位有效数字,保留 1 位小数
6.加密
md5 函数,可以将给定的字符串经过 md5 算法进行加密处理。
加密后生成一个固定长度 32 位的字符串,md5 加密后通常不能解密。
select md5('root');