我已将一系列CSV文件导入MySQL。日期列的格式如下:
1152015
12242014
12292014
1072015
1142015
1152015
1142015
1142015
1052015
12232014
1062015
12222014
1052015
STR_TO_DATE(colName, '%m/%d/%Y')
不起作用,只返回空值。如何将这些格式化为日期?
答案 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'
格式,然后事情变得越来越复杂。