【问题标题】:query sql convert text field dd/mm/yyyy to date field yyyy-mm-dd查询sql将文本字段dd/mm/yyyy转换为日期字段yyyy-mm-dd
【发布时间】:2010-11-10 10:31:16
【问题描述】:

我已将日期格式为dd/mm/yyyy 的 CSV 文件导入 mysql。

我现在需要一个查询来将它从文本转换为日期格式yyy-mm-dd

【问题讨论】:

    标签: mysql date


    【解决方案1】:

    您可以使用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;
    

    【讨论】:

    • 请考虑标记其中一个答案,以便我们知道问题已结束;)
    【解决方案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;
    

    【讨论】:

      【解决方案3】:

      这应该有效,但它没有:

      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));
      

      【讨论】:

        【解决方案4】:

        以上内容很有帮助,但以下内容在 Mysql 上对我有用。

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-06-22
          • 1970-01-01
          • 2023-03-27
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          相关资源
          最近更新 更多