日期格式化CSV MySQL PHP

时间:2015-03-23 01:34:51

标签: php mysql date

我已将一系列CSV文件导入MySQL。日期列的格式如下:

1152015
12242014
12292014
1072015
1142015
1152015
1142015
1142015
1052015
12232014
1062015
12222014
1052015

STR_TO_DATE(colName, '%m/%d/%Y')不起作用,只返回空值。如何将这些格式化为日期?

3 个答案:

答案 0 :(得分:1)

我猜测格式中缺少前导零。然后,您应该使用正确的格式字符串:

SELECT STR_TO_DATE(RIGHT(CONCAT('0', colName), 8), '%m%d%Y') 

或者,您可以按件构建日期字符串:

SELECT DATE(CONCAT_WS('-', right(colName, 4), left(right(colname, 6), 2),
                      left(right(concat('0', colname), 8), 2)
                     )
           )

答案 1 :(得分:0)

我不知道你是否需要直接在查询中进行转换,但是如果你想在PHP而不是mysql中使用该列,你可以循环执行:

<?php
    $matches = array();
    preg_match("%([0-9]{2})([0-9]{1,2})([0-9]{4})%","12292014", $matches);
    $date = $matches[1] . '/' . $matches[2] . '/' . $matches[3];
    var_dump($date);

我使用了“12292014”,但您只需要为迭代值更改此值。

(见行动here

答案 2 :(得分:0)

这可能是'%m%e%Y'格式(PHP中为'mjY'),因为缺少前导零,php和mysql在自动转换时遇到问题。

php解决方案(将字符串转换为'mj-Y'并使用DateTime::createFromFormat):

$d = '1072015';
$date = DateTime::createFromFormat( 'mj-Y', sprintf( '%s-%s', substr( $d, 0, -4 ), substr( $d, -4 ) ) );
echo $date->format('Y-m-d');

mysql解决方案(转换为'%m%e-%Y'):

STR_TO_DATE( CONCAT( LEFT( column, LENGTH(column) - 4 ), '-', RIGHT( postTitle, 4 ) ), '%m%e-%Y' )

它也可能是'%c%e%Y'格式,然后事情变得越来越复杂。