题解 | 查询2022年毕业用户的刷题记录
查询2022年毕业用户的刷题记录
https://www.nowcoder.com/practice/e53e8797213748038a5faeb8563ba27a
select q.user_id, q.question_type, q.device, q.pass_count, q.date from questions_pass_record q left join user_info u on q.user_id = u.user_id where graduation_year = '2022'
题目中没有问到,但做题的时候想起来了,顺道补充一下
从 date里面提取年份
在 SQL 中,从日期(date)类型字段中提取年份的方法因数据库不同而略有差异,以下是主流数据库的实现方式:
1. MySQL
使用 YEAR() 函数,直接提取年份:
sql
SELECT YEAR(date_column) AS year -- date_column 是日期类型字段 FROM table_name;
示例:
sql
SELECT YEAR('2023-10-05') AS year; -- 结果:2023
2. SQL Server
使用 YEAR() 函数(与 MySQL 兼容):
sql
SELECT YEAR(date_column) AS year FROM table_name;
或使用 DATEPART() 函数,指定 year 作为提取单位:
sql
SELECT DATEPART(year, date_column) AS year FROM table_name;
示例:
sql
SELECT YEAR('2023-10-05') AS year; -- 结果:2023
SELECT DATEPART(year, '2023-10-05') AS year; -- 结果:2023
3. Oracle
使用 EXTRACT() 函数,从日期中提取年份:
sql
SELECT EXTRACT(YEAR FROM date_column) AS year FROM table_name;
或使用 TO_CHAR() 函数将日期转换为包含年份的字符串(需指定格式):
sql
SELECT TO_CHAR(date_column, 'YYYY') AS year -- 'YYYY' 表示4位年份 FROM table_name;
示例:
sql
SELECT EXTRACT(YEAR FROM TO_DATE('2023-10-05', 'YYYY-MM-DD')) AS year; -- 结果:2023
SELECT TO_CHAR(TO_DATE('2023-10-05', 'YYYY-MM-DD'), 'YYYY') AS year; -- 结果:'2023'(字符串类型)
4. PostgreSQL
使用 EXTRACT() 函数或 DATE_PART() 函数:
sql
-- 方法1:EXTRACT
SELECT EXTRACT(YEAR FROM date_column) AS year
FROM table_name;
-- 方法2:DATE_PART
SELECT DATE_PART('year', date_column) AS year
FROM table_name;
示例:
sql
SELECT EXTRACT(YEAR FROM '2023-10-05'::date) AS year; -- 结果:2023
SELECT DATE_PART('year', '2023-10-05'::date) AS year; -- 结果:2023
通用说明
- 所有方法均适用于
DATE类型字段,若字段是字符串(如'2023-10-05'),需先通过TO_DATE()(Oracle)、STR_TO_DATE()(MySQL)等函数转换为日期类型再提取年份。 - 提取结果通常为整数(如
2023),部分函数(如 Oracle 的TO_CHAR)返回字符串,需根据需求处理类型。
根据使用的数据库选择对应函数即可,核心是通过数据库提供的日期提取函数定位到 “年份” 部分。
查看8道真题和解析

