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

ste*_*ano 9 mysql date

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

干杯

S.

con*_*nny 16

您可以使用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;
Run Code Online (Sandbox Code Playgroud)


DMA*_*361 5

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

STR_TO_DATE( datefield , "%d/%m/%Y" )
Run Code Online (Sandbox Code Playgroud)

如果您需要DATE特定格式,可以使用DATE_FORMAT().
对于您的情况来说,这可能不是必需的,但这里有一个完整性示例:

DATE_FORMAT( STR_TO_DATE( datefield , "%d/%m/%Y" ) , "%Y/%m/%d" )
Run Code Online (Sandbox Code Playgroud)

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

UPDATE tableName
SET originalDate = DATE_FORMAT(STR_TO_DATE(originalDate,"%d/%m/%Y" ),"%Y/%m/%d" );
Run Code Online (Sandbox Code Playgroud)

或者,如果您想转换列的数据类型,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;
Run Code Online (Sandbox Code Playgroud)