题解 | 查询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
)返回字符串,需根据需求处理类型。
根据使用的数据库选择对应函数即可,核心是通过数据库提供的日期提取函数定位到 “年份” 部分。