我的专栏中包含2015年6月' 2015年7月',' 2014年3月',' 2016年2月&#格式的值39;
我需要将这些格式转换为06 / 2015,07 / 2015,33 / 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
有两个问题。此查询会将值转换为“2015年6月”,“2015年7月”,“#3; 2014年”,“2016年2月”和“第39页”等格式; (没有前导0表示单个数字月份),并且没有正确排序,因为YEAR没有被考虑在内 - 因此他们被命令: ' 2/2016',' 3/2014',' 6/2015',' 7/2015'
我尝试将其全部包装在DATE()
函数中,但刚刚为所有值返回NULL
。
关于如何实现我想要的任何想法?
由于
答案 0 :(得分:3)
STR_TO_DATE适用于我的格式为'%M%Y':
mysql> select str_to_date('July 2015', '%M %Y');
+-----------------------------------+
| str_to_date('July 2015', '%M %Y') |
+-----------------------------------+
| 2015-07-00 |
+-----------------------------------+
1 row in set (0.10 sec)
如果您出于某种原因无法做同样的事情,请扩展您的问题。
要将其转换为完整查询(我显然无法在没有您的表的情况下进行测试,因此告诫lector ):
SELECT DATE_FORMAT(d, '%m/%Y')
FROM
(SELECT str_to_date(quotation_exp_conversion_date, '%M %Y') AS d FROM quotation)
ORDER BY d ASC;