大厂面试sql手撕题目总结

1. 常用函数

1. 日期函数

常用日期函数:

-- 返回当前日期
select curdate();  # 2024-05-06
-- 返回当前时间
select curtime();  # 21:41:58
-- 返回当前日期加时间
select now();  # 2024-05-06 21:40:53
-- 获取指定date的年份
select year('2024-05-06 21:40:53'); # 2024
-- 获取指定date的月份
select month('2024-05-06 21:40:53'); # 5
-- 获取指定date的年份
select day('2024-05-06 21:40:53'); # 6
-- 返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_add('2024-05-06',interval 1 year ); # 2025-05-06
select date_add('2024-05-06',interval 1 month ); # 2024-06-06
select date_add('2024-05-06',interval 1 day ); # 2024-05-07

-- timestampdiff(单位 ,date1,date2)    返回俩个日期之间的差值
# 单位有:
# 1、YEAR 年
# 2、QUARTER 季度
# 3、MONTH 月
# 4、WEEk 星期
# 5、DAY 天
# 6、HOUR 小时
# 7、MINUTE 分钟
# 8、SECOND 秒
# 9、FRAC_SECOND 毫秒
select timestampdiff(day ,'2024-05-06','2024-06-06'); # 31

-- DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。
select DATE_FORMAT(NOW(),'%Y-%m-%d');  # 2024-05-06
select DATE_FORMAT(NOW(),'%d %b %Y %T'); # 06 May 2024 22:02:33
-- 返回一个日期/时间值加上一个时间间隔expr后的时间值
select date_sub('2024-05-06',interval 1 day );  # 2024-05-05

2. 字符串函数函数

-- 截取字符串
sub_str('2024-08-22',1,4)   ---->  '2024'
【注】索引是从1开始,截取4个字符
---------------------------------------------------
-- 字符串拼接
concat_ws(',',delivery_time,customer_id)  -- 将两列的数据按‘,’拼接成一列
concat(delivery_time,customer_id)  -- 字符串拼接

2. 行转列(转置)

行转列的常规做法是,group by+sum(if())【或count(if())】

1. 行转列

问题描述:
在这里插入图片描述
代码实现:

-- 行转列
-- 建表
create table table2(year int,month int ,amount double) CHARACTER SET utf8 COLLATE utf8_bin;
 insert into table2 values
 		   (1991,1,1.1),
    	   (1991,2,1.2),
           (1991,3,1.3),
           (1991,4,1.4),
           (1992,1,2.1),
           (1992,2,2.2),
           (1992,3,2.3),
           (1992,4,2.4);
-- 实现
select year,
       sum(if(month = 1,amount,0)) as m1,
       sum(if(month
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值