查询sql转换文本字段dd / mm / yyyy到日期字段yyyy-mm-dd

时间:2010-11-10 10:31:17

标签: mysql date

我已将CSV文件导入mysql,日期为dd / mm / yyyy 现在需要一个查询来将其从文本转换为日期格式yyy-mm-dd

干杯

S上。

4 个答案:

答案 0 :(得分:15)

您可以使用STR_TO_DATE(str, format) MySQL函数。

转换my_date_col转换后的示例:

BEGIN;
 ALTER TABLE `date_test` 
  ADD COLUMN `my_date_col_converted` DATE;

 UPDATE `date_test` 
  SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y');

 ALTER TABLE `date_test` 
  DROP COLUMN `my_date_col`;

 ALTER TABLE `date_test` 
  CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE;
COMMIT;

答案 1 :(得分:2)

您可以通过以下方式使用STR_TO_DATE()将文字转换为DATE

STR_TO_DATE( datefield , "%d/%m/%Y" )

如果您需要特定格式的DATE,则可以使用DATE_FORMAT() 在您的情况下,这可能不是必需的,但这是完整性的示例:

DATE_FORMAT( STR_TO_DATE( datefield , "%d/%m/%Y" ) , "%Y/%m/%d" )

因此,您可以使用单个UPDATE对整个表执行此操作,以使用重新格式化的数据替换当前数据(同时保持数据类型相同):

UPDATE tableName
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y" ),"%Y/%m/%d" );

或者,如果要转换列DATE的数据类型,可以更改表以创建新的DATE格式化列,使用上面的更新来填充该列,删除原始列,然后(可选)将新列重命名为旧名称。

ALTER tableName
ADD modifiedDate DATE;

UPDATE tableName
SET modifiedDate = DATE_FORMAT( STR_TO_DATE( originalDate ,"%d/%m/%Y" ) ,"%Y/%m/%d" );

ALTER tableName
DROP COLUMN originalDate; 

ALTER tableName
CHANGE COLUMN modifiedDate originalDate;

答案 2 :(得分:1)

这应该有效,但不是:

BEGIN;
 ALTER TABLE `date_test` 
  ADD COLUMN `my_date_col_converted` DATE;
 UPDATE `date_test` 
  SET `my_date_col_converted` = STR_TO_DATE(`my_date_col`, '%d/%c/%Y');
 ALTER TABLE `date_test` 
  DROP COLUMN `my_date_col`;
 ALTER TABLE `date_test` 
  CHANGE COLUMN `my_date_col_converted` `my_date_col` DATE;
COMMIT;

这也应该有效:不起作用

UPDATE db_test SET anticipated_court_date = DATE_FORMAT(STR_TO_DATE(anticipated_court_date,"%d/%m/%Y" ),"%Y-%m-%d" );

服务器版本:5.0.95-community-log MySQL社区版(GPL)

然而这有效:

SELECT STR_TO_DATE('8/31/12', '%m/%d/%Y'); // WORKS

使用MySQL - 我找不到任何可靠的解决方案。即使是完全相同的日期也未成功转换。

The solution I've found is this:  PHP
$user_date = "8/31/12"; // WORKS
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date));

答案 3 :(得分:0)

上面的内容很有帮助,但以下内容适用于Mysql。

ALTER TABLE `tablename` ADD `newcolumn` DATE NOT NULL ;
UPDATE `tablename` SET `newcolumn`=STR_TO_DATE(`oldcolumn`, '%d/%c/%Y')

现在删除旧列(如果您愿意)。