【发布时间】:2015-06-23 12:27:34
【问题描述】:
我有一列包含格式为“2015 年 6 月”、“2015 年 7 月”、“2014 年 3 月”、“2016 年 2 月”的值。
我需要将这些格式转换为 06/2015、07/2015、03/2014、02/2016.. 但还要将它们设为日期,以便我可以按此列排序。
我目前有以下选择:
SELECT CONCAT(MONTH(STR_TO_DATE(LEFT(SUBSTRING_INDEX(quotation.quotation_exp_conversion_date, ' ', 1),3), '%b')), '/', SUBSTRING_INDEX(quotation.quotation_exp_conversion_date, ' ', -1)) AS exp_conversion_date
FROM quotation
WHERE quotation.quotation_status = 'LIVE'
ORDER BY exp_conversion_date ASC
有两个问题。此查询将值转换为格式“6/2015”、“7/2015”、“3/2014”、“2/2016”(对于单个数字月份没有前导 0),并且没有正确排序,因为不考虑 YEAR - 所以它们被订购: '2/2016'、'3/2014'、'6/2015'、'7/2015'
我尝试将其全部包装在 DATE() 函数中,但它只为所有值返回了 NULL。
关于如何实现我想要的任何想法?
谢谢
【问题讨论】:
-
如果您将其转换为
DATE之类的数据类型,它不会具有 格式 - 这就是重点,它包含日期,而不是 字符串 表示日期。但是,如果您乐于使用字符串,为什么不转换为YYYY-MM格式 - alphabetical 排序自然会产生所需排序顺序的格式?