在datetime中转换特定字符串

时间:2016-09-11 01:40:46

标签: mysql datetime

我正在尝试更新包含mysql字符串的列,并使用datetime发送到另一列。我使用以下查询

update 2001080_t val
set val.datetimestamp = convert (val.NotUsed4, datetime) 

但是字符串格式不正确的问题

   Example:
  `string` 010716000000
  ideal way 2016-07-01 00:00:00
  results from query:  2001-07-16 00:00:00

如何改变阅读方式?

1 个答案:

答案 0 :(得分:0)

你可以自己操纵日期,因为MySQL永远不会以这种方式真正识别日期,如下所示:

SELECT CONCAT(IF(RIGHT(LEFT('010716000000',6),2) < 30, '20', '19'),
RIGHT(LEFT('010716000000',6),2), '-', RIGHT(LEFT('010716000000',4),2),
'-', LEFT('010716000000',2));

所以你的查询看起来像这样。

UPDATE 2001080_t val
SET val.datetimestamp = CONCAT(IF(RIGHT(LEFT(val.NotUsed4,6),2) < 30, '20', '19'),
RIGHT(LEFT(val.NotUsed4,6),2), '-',
RIGHT(LEFT(val.NotUsed4,4),2), '-',
LEFT(val.NotUsed4,2));

如果你经常这样做,我会建议为它做一个功能:

CREATE FUNCTION hello (myIntDate INT(12))
RETURNS DATETIME
RETURN CONCAT(IF(RIGHT(LEFT(myIntDate,6),2) < 30, '20', '19'),
    RIGHT(LEFT(myIntDate,6),2), '-',
    RIGHT(LEFT(myIntDate,4),2), '-',
    LEFT(myIntDate,2));

编辑:添加支持,如果年份是&gt; 30,它被认为是1900年。