MySQL中date_format转换日期后排序失效问题求解
解决MySQL DateTime格式化后排序失效的问题
问题根源:date_format()函数会把DateTime类型转成字符串,排序时MySQL会按字符串的字典顺序而非日期逻辑来排序,导致结果不符合预期。
给你两种可行的解决办法:
方法一:直接按原始DateTime字段排序(推荐)
保留格式化后的字段用于展示,排序时使用表中原始的createdDate字段(DateTime类型),这样排序逻辑完全按日期处理,还能利用字段上的索引提升性能。Select date_format(createdDate,'%d/%m/%Y') as created from OrderTable Order BY createdDate;方法二:将格式化后的字符串转回日期类型再排序
如果场景限制必须用别名created排序,可以用str_to_date()函数把字符串转回日期类型,再基于这个日期排序:Select date_format(createdDate,'%d/%m/%Y') as created from OrderTable Order BY str_to_date(created, '%d/%m/%Y');注意:这种方法需要额外的类型转换,性能比方法一差,仅在必要时使用。
内容的提问来源于stack exchange,提问作者Goutham Gunji
相关产品推荐
相关产品推荐

