MySQL基础关键_004_DQL(三)

目 录

一、数据处理函数2

1.空处理

2.日期和时间相关

[(1)利用 now 和 sysdate 获取当前日期和时间](#(1)利用 now 和 sysdate 获取当前日期和时间)

[(2)利用 curdate 或 current_date 获取当前日期](#(2)利用 curdate 或 current_date 获取当前日期)

[(3)利用 curtime 或 current_time 获取当前时间](#(3)利用 curtime 或 current_time 获取当前时间)

(4)获取单独的年、月、日、时、分、秒

[(5)利用 date_add 给指定日期添加间隔时间](#(5)利用 date_add 给指定日期添加间隔时间)

[(6)利用 date_format 日期格式化](#(6)利用 date_format 日期格式化)

[(7)利用 str_to_date 将字符串转换为日期类型](#(7)利用 str_to_date 将字符串转换为日期类型)

(8)判断第几天

[(9)利用 last_day 查询给定日期所在月的最后一天日期](#(9)利用 last_day 查询给定日期所在月的最后一天日期)

[(10)利用 datediff 计算两个日期之间相差的天数](#(10)利用 datediff 计算两个日期之间相差的天数)

[(11)利用 timediff 计算两个日期之间相差的时间](#(11)利用 timediff 计算两个日期之间相差的时间)

3.if

(1)说明

[(2)员工薪资高于 3000,输出"标准薪资",反之输出"较低薪资"](#(2)员工薪资高于 3000,输出“标准薪资”,反之输出“较低薪资”)

(3)若员工姓名是"SMITH",薪资上调10%

4.case

(1)为职位是"MARTIN"和"SALESMAN"的员工,薪资分别上调10%和20%

5.cast

(1)说明

[(2) 将 3.14 转换为 int 类型](#(2) 将 3.14 转换为 int 类型)

(3)将字符串转换为日期时间类型

(4)浮点型转换

6.加密


一、数据处理函数2

1.空处理

  1. 利用 ifnull(x, y) 进行空处理。当 x 为 NULL 时,将 x 当作 y 处理;
  2. 在 SQL 中,凡是有 NULL 参与的数学运算,最终计算结果都是 NULL;
  3. 实例:查询每个员工的姓名和总收入(总收入 =(月薪 + 津贴)* 12)。注意:部分员工的津贴为 NULL。
sql 复制代码
select emp_name, (salary + ifnull(commission, 0)) * 12 as total_income from employees;

2.日期和时间相关

(1)利用 now 和 sysdate 获取当前日期和时间

  1. now():获取执行 select 语句的时刻;
  2. sysdate():获取执行 sysdate() 函数的时刻。

(2)利用 curdate 或 current_date 获取当前日期

sql 复制代码
# 1
curdate();

# 2
current_date();

# 3
current_date;

(3)利用 curtime 或 current_time 获取当前时间

sql 复制代码
# 1
select curtime();

# 2
select current_time();

# 3 
select current_time;

(4)获取单独的年、月、日、时、分、秒

sql 复制代码
# 年
select year(now());

# 月
select month(now());

# 日
select day(now());

# 时
select hour(now());

# 分
select minute(now());

# 秒
select second(now());

(5)利用 date_add 给指定日期添加间隔时间

  1. 语法格式:【date_add(日期, interval expr 单位);】;
  2. interval:间隔关键字;
  3. expr:具体间隔量,一般为数字。可以为负数,若为负数,等同于 date_sub 的效果;
  4. 单位:
    1. 年:year;
    2. 月:month;
    3. 日:day;
    4. 时:hour;
    5. 分:minute;
    6. 秒:second;
    7. 微秒:microsecond;
    8. 周:week;
    9. 季度:quarter。
  5. 复合单位:单位除上述九种外,还有许多复合型单位。例如:
    1. second_microsecond;
    2. minute_microsecond;
    3. minute_second;
    4. hour_minute;
    5. hour_second;
    6. hour_microsecond;
    7. day_microsecond;
    8. day_second;
    9. day_minute;
    10. day_hour;
    11. year_month。
sql 复制代码
# 当前日期间隔三天
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 日期格式化

  1. 将日期转换成某种格式的日期格式字符串,date ---> char;
  2. 语法格式:【date_format(日期, '日期格式');】;
  3. 日期格式:
    1. %Y:四位年份;
    2. %y:两位年份;
    3. %m:月份;
    4. %d:日;
    5. %H:时;
    6. %i:分;
    7. %s:秒。
sql 复制代码
select date_format(now(), '%Y年%m月%d日 %H时%i分%s秒');

(7)利用 str_to_date 将字符串转换为日期类型

语法格式:【str_to_date('日期字符串', '日期格式');】。

sql 复制代码
select str_to_date('2025/05/01', '%Y/%m/%d');

(8)判断第几天

  1. dayofweek():一周中的第几天(周日是第一天);
  2. dayofmonth():一月中的第几天;
  3. dayofyear():一年中的第几天。
sql 复制代码
select dayofweek(now());

select dayofmonth(now());

select dayofyear(now());

(9)利用 last_day 查询给定日期所在月的最后一天日期

sql 复制代码
select last_day(now());

select last_day('2024-12-06');

(10)利用 datediff 计算两个日期之间相差的天数

sql 复制代码
select datediff(now(), '2027-05-01 21:47:15');

select datediff('2027-05-01 21:47:15', now());

(11)利用 timediff 计算两个日期之间相差的时间

sql 复制代码
select timediff(now(), '2025-05-01 21:49:33');

select timediff('2025-05-01 21:49:33', now());

3.if

(1)说明

  1. 语法格式:【select if(条件, x, y);】;
  2. 如果条件为 true 返回 x,条件为 false 返回 y。

(2)员工薪资高于 3000,输出"标准薪资",反之输出"较低薪资"

sql 复制代码
select emp_name, salary, if(salary >= 3000, '标准薪资', '较低薪资') as assess from employees;

(3)若员工姓名是"SMITH",薪资上调10%

sql 复制代码
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%

sql 复制代码
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)说明

  1. 用于将值从一种数据类型转换为表达式中指定的另一种数据类型;
  2. 语法格式:【cast (值 as 数据类型);】;
  3. 数据类型:
    1. 日期类型:date;
    2. 时间类型:time;
    3. 日期时间类型:datetime;
    4. 有符号 int 类型:signed(符号是正负数);
    5. 定长字符串类型:char;
    6. 浮点型:decimal。

(2) 将 3.14 转换为 int 类型

sql 复制代码
select cast(3.14 as signed);

(3)将字符串转换为日期时间类型

sql 复制代码
select cast('2025/05/01' as datetime);

(4)浮点型转换

sql 复制代码
select cast(00520.1314 as decimal(5, 1));
-- decimal(5, 1) 的意思是:保留 5 位有效数字,保留 1 位小数

6.加密

md5 函数,可以将给定的字符串经过 md5 算法进行加密处理。

加密后生成一个固定长度 32 位的字符串,md5 加密后通常不能解密。

sql 复制代码
select md5('root');
相关推荐
厦门德仔6 分钟前
【YiFeiWebApi】易飞ERP与WMS系统接口对接实战:从0到1全流程指南
大数据·数据库
内存漫游9 分钟前
Page 到底是什么:数据库如何把一条条记录放进磁盘
数据库
小镇敲码人9 分钟前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http
Sirens.13 分钟前
MySQL数据库:索引
数据库·mysql
2601_9620725015 分钟前
大数据-234 离线数仓 - 异构数据源 DataX 将数据 从 HDFS 到 MySQL
大数据·mysql·hdfs
treacle田1 小时前
达梦数据库-Linux DM主备集群动态增加节点-记录总结
linux·运维·数据库·达梦主备集群动态扩展
一只专注api接口开发的技术猿1 小时前
Open Claw 实战|快速搭建电商商品监控与数据分析能力
大数据·数据库·数据挖掘·数据分析
杨云龙UP1 小时前
Oracle 19c RMAN历史备份清理失败:CONTROL_FILE_RECORD_KEEP_TIME 问题排查与整改实战
linux·运维·网络·数据库·oracle·rac
2601_962073971 小时前
【MySQL】全面学习数据库查询技巧:查询指令深度学习指南
数据库·学习·mysql
新知图书1 小时前
12.3 智能体中Skill的约束与自进化实战
java·前端·数据库