SQL中如何对格式为月日年的varchar类型日期字段排序?
解决Varchar格式日期排序问题
你的问题核心是数据库无法自动识别这种英文月份名开头的字符串格式为日期,必须用对应数据库的日期解析函数指定格式才能完成转换,进而实现排序。以下是主流数据库的具体实现语句:
MySQL/MariaDB
使用STR_TO_DATE函数,指定匹配的格式串(%M对应完整英文月份名,%d对应两位日期,%Y对应四位年份):
SELECT * FROM receipt WHERE ID=? ORDER BY STR_TO_DATE(`DATE`, '%M %d, %Y') DESC;
注意:DATE是SQL关键字,用反引号`括起来避免语法冲突
SQL Server
可以用PARSE函数直接识别英文格式的日期字符串,或者用TRY_CONVERT兼容更多场景:
-- 方法1:PARSE指定英文区域解析 SELECT * FROM receipt WHERE ID=? ORDER BY PARSE([DATE] AS DATE USING 'en-US') DESC; -- 方法2:TRY_CONVERT用对应风格代码解析(109对应带月份名的格式) SELECT * FROM receipt WHERE ID=? ORDER BY TRY_CONVERT(DATE, [DATE], 109) DESC;
PostgreSQL
使用TO_DATE函数,配合FMMonth模板忽略月份名后的多余空格:
SELECT * FROM receipt WHERE ID=? ORDER BY TO_DATE("DATE", 'FMMonth DD, YYYY') DESC;
额外建议
如果业务允许,最好把DATE字段的类型修改为DATE或DATETIME,这样不仅排序更高效,还能避免后续日期操作的各种兼容性问题。
内容的提问来源于stack exchange,提问作者Miger
相关产品推荐
相关产品推荐

