我正在尝试转换一个大表,该表的日期格式为月份中的日期 - 月份缩写 - 连续用破折号分隔的年份,例如01-Jan-2014
. 我发现的最接近的问题是一个问题,提问者最终进行了搜索和替换方法。 我也可以这样做,但我认为肯定有更好的方法。 我的代码:
SELECT STR_TO_DATE(datecolumn, '%c/%d/%Y') FROM 'Table'
返回带有上述格式的日期的 null,但对于其他日期格式则不符。 我还尝试了DATE_FUNCTION
和我在网上看到的其他建议。
这将做到这一点:
SELECT
DATE_FORMAT(
STR_TO_DATE(
REPLACE(
SUBSTRING_INDEX(datecolumn,'-',-2),
'-',
CONCAT(' ', SUBSTRING_INDEX(datecolumn, '-', 1), ', ')
),
'%M %d, %Y'
),
'%Y-%m-%d'
)
FROM `Table`;
解释:
- 我们使用
SUBSTRING_INDEX(datecolumn,'-',-2)
来获得最后两件,例如Jan-2014
- 我们将
Jan-2014
中的-
替换为第一块(使用SUBSTRING_INDEX
),即01
,但也使用CONCAT
添加空格和,
,因此我们得到Jan 01, 2014
- 我们使用
STR_TO_DATE
并告诉它格式是%M %d, %Y
- 然后我们把它放在
%Y-%m-%d
格式中,并附上DATE_FORMAT()
例子:
07-Jan-2014 -> 2014-01-07
9-May-2001 -> 2001-05-09
13-Dec-1978 -> 1978-12-13
这是一个小提琴