MySQL中EXTRACT(YEAR)提取dd/mm/yy格式日期年份错误求助
解决EXTRACT(YEAR)提取dd/mm/yy日期年份错误的问题
问题根源
你的数据库未按dd/mm/yy格式解析日期字符串23/01/22,错误识别为其他格式(如yy/mm/dd),导致年份被解析为2023而非2022。
针对不同数据库的解决方案
根据你使用的数据库类型,选择对应的方法先将字符串按指定格式转为日期,再提取年份:
MySQL/MariaDB
使用STR_TO_DATE函数明确指定解析格式:EXTRACT(YEAR FROM STR_TO_DATE('23/01/22', '%d/%m/%y')) AS extracted_year说明:
%d表示两位日期,%m表示两位月份,%y表示两位年份(自动映射为2000-2099区间的四位年份)。PostgreSQL
使用TO_DATE函数指定格式转换:EXTRACT(YEAR FROM TO_DATE('23/01/22', 'DD/MM/YY')) AS extracted_year说明:PostgreSQL中
YY格式的两位年份默认规则为00-69对应2000-2069,70-99对应1970-1999,符合你的需求。SQL Server
使用CONVERT函数搭配样式码103(对应dd/mm/yy格式):EXTRACT(YEAR FROM CONVERT(DATE, '23/01/22', 103)) AS extracted_year若需避免无效日期解析报错,可改用
TRY_CONVERT:EXTRACT(YEAR FROM TRY_CONVERT(DATE, '23/01/22', 103)) AS extracted_year
额外建议
如果是批量处理此类数据,建议在数据导入或存储阶段就按dd/mm/yy格式将字符串转为日期类型,避免每次查询重复转换,提升效率。
内容的提问来源于stack exchange,提问作者Carlos Alberto
相关产品推荐
相关产品推荐

