如何提取SQL日期中的年份_使用YEAR或EXTRACT函数

张开发
2026/4/12 19:22:51 15 分钟阅读

分享文章

如何提取SQL日期中的年份_使用YEAR或EXTRACT函数
YEAR()在MySQL中可直接处理日期字符串或函数如NOWSQL Server则需显式转换为日期类型EXTRACT(YEAR FROM ...)为SQL标准函数但各数据库对输入格式要求不同跨库兼容需结合DATE_FORMAT、FORMAT或日期范围过滤等替代方案。YEAR() 函数在 MySQL 和 SQL Server 中怎么用YEAR() 是 MySQL 和 SQL Server 里最直接取年份的函数但行为不完全一致——MySQL 接受日期字符串或日期类型SQL Server 要求必须是 date、datetime 等合法日期类型传入 2024-03-15 没问题但传 20240315无分隔符会报错 Conversion failed when converting date and/or time from character string。MySQL 中 YEAR(2024-03-15) → 2024YEAR(NOW()) 也成立SQL Server 不支持 YEAR(2024-03-15) 这种隐式转换得写成 YEAR(CAST(2024-03-15 AS DATE))如果字段是 varchar 存的日期比如 2024/03/15先用 TRY_CASTSQL Server 2012或 STR_TO_DATEMySQL转成日期再取年否则 YEAR 直接返回 NULL 或报错EXTRACT(YEAR FROM ...) 在 PostgreSQL 和标准 SQL 中的写法差异EXTRACT 是 SQL 标准函数在 PostgreSQL、Oracle、BigQuery 都可用但语法细节容易出错它要求右侧必须是明确的日期/时间类型表达式不能是字符串字面量直传。PostgreSQL 中 EXTRACT(YEAR FROM 2024-03-15::DATE) 可行但 EXTRACT(YEAR FROM 2024-03-15) 会报错 function extract(unknown, unknown) does not existOracle 要求用 DATE 字面量如 EXTRACT(YEAR FROM DATE 2024-03-15)不能用单引号包普通字符串BigQuery 支持 EXTRACT(YEAR FROM 2024-03-15) —— 它自动尝试解析字符串但遇到 20240315 就失败得显式用 PARSE_DATE(%Y%m%d, 20240315)跨数据库兼容写法为什么别硬套 YEAR() 或 EXTRACT()想写一次 SQL 跑多个库基本做不到。YEAR() 在 PostgreSQL 里根本不存在EXTRACT() 在 SQL Server 里也不支持。更麻烦的是有些场景下你其实不需要“年份数字”而是要按年分组统计——这时直接用日期范围过滤或 DATE_TRUNC(year, col)PostgreSQL/BigQuery反而更稳、更快。 跃问 跃问是由阶跃星辰开发的免费AI智能问答助手随时帮你智能搜索、高效阅读、识图理解、和你畅聊感兴趣的话题。

更多文章