我正在尝试使用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
提前致谢!
答案 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客户端中运行此命令,则会得到预期的结果。