Cast to datetime仅对MySQL

时间:2016-01-29 12:32:54

标签: mysql datetime

我正在尝试使用str_to_date()在MySQL中强制转换varchar列,问题是如果从列中复制字符串它会很有效,例如'04 / 24/2015 00:00:00',但是当您使用列本身进行尝试时,它将返回null。

这是我的试用版查询:

SELECT STR_TO_DATE('04/24/2015 00:00:00', '%m/%d/%Y %T'),
STR_TO_DATE(StartDate,'%m/%d/%Y %T'), StartDate
FROM TMP;

返回:

2015-04-24 00:00:00  (NULL)  04/24/2015 00:00:00

我尝试了很多东西,但似乎没什么用......

这是HEX(startdate)的结果:

2015-04-24 00:00:00 (NULL) 00300034002F00320034002F0032003000310035002000300030003A00300030003A00300030

提前致谢!

3 个答案:

答案 0 :(得分:0)

这在这里运作正常。不知道为什么你的不工作。

Sqlfiddle:http://www.sqlfiddle.com/#!9/9c2499/1/0

答案 1 :(得分:0)

您好我认为您的StartDate列是DateTime类型,因此当您执行STR_TO_DATE时它不起作用。

  

尝试将STR_TO_DATE更改为DATE_FORMAT

SELECT STR_TO_DATE('04/24/2015 00:00:00', '%m/%d/%Y %T'), DATE_FORMAT(StartDate,'%b %d %Y %h:%i %p'), StartDate as dt FROM TMP;

希望这有帮助

答案 2 :(得分:0)

我不确定root问题,但是MySQL将您的SQL代码和列数据解释为采用不同的编码,而STR_TO_DATE()函数无法解决这个问题。请参阅测试代码:

SELECT 
STR_TO_DATE('04/24/2015 00:00:00', '%m/%d/%Y %T'),
STR_TO_DATE(StartDate, '%m/%d/%Y %T'),
STR_TO_DATE(CONVERT(StartDate USING utf8), '%m/%d/%Y %T'),
StartDate
FROM (
    SELECT _utf16 0x00300034002F00320034002F0032003000310035002000300030003A00300030003A00300030 AS StartDate
) TMP;

如果在配置为UTF-8的MySQL客户端中运行此命令,则会得到预期的结果。