【问题标题】:Convert time and date to mysql datetime将时间和日期转换为 mysql 日期时间
【发布时间】:2024-04-28 15:15:02
【问题描述】:

我的 DB September 20, 2011 18:00:00 中有一个以下格式的日期 但是,如果我想在 mysql 中应用日期函数,例如删除具有此日期或更早日期的记录,这将不起作用。执行此操作的正确格式必须是 2011-09-20 18:00:00

那么有什么简单的方法可以将第一个日期转换为第二个日期?还是更容易在表格中为日期时间格式创建另一个字段?

【问题讨论】:

  • 您应该以datetime 格式保存日期,而不是varchar。保存数据,而不是演示。
  • 当然,愚蠢的我..菜鸟错误

标签: mysql datetime


【解决方案1】:
$s = 'September 20, 2011 18:00:00';
$unix_timestamp = strtotime($s);
$mysql_timestamp = date('Y-m-d H:i:s',$unix_timestamp); // now looks like '2011-09-20 18:00:00'

【讨论】:

    【解决方案2】:

    我不知道直接在mysql中怎么做,但是你可以创建一个帮助脚本。

    伪代码如下:

    $data = db_query("SELECT id, date FROM footable");
    
    foreach ($data => $item) {
      // repeat line below for all months
      $new_item string_replace($item, "September", 9)
      $new_date = regex_replace($new_item, 
        "([0-9]{1,2}) ([0-9]{1,2}), ([0-9]{4}) (.*)", 
        "$3-$2-$1 $4");
      db_query("UPDATE footable SET date = $newdate");
    }
    

    【讨论】:

      【解决方案3】:

      我没有看到一个全 MySQL 的答案。 :)

      假设您的“日期时间”字段名为“dt”,您可以通过首先将字符串重新格式化为 MySQL 将识别为 DATETIME 的字符串格式,然后将其更改为正确的类型 (DATETIME),然后更改列的类型。准备好备份,以防您或我在下面出现拼写错误。

      SET sql_mode=ansi;    -- for || operator
      
      UPDATE tbl SET dt = LEFT(SUBSTRING_INDEX(dt, ' ', -2), 4)            -- YYYY
                          || '-'
                          || LPAD(FIELD(SUBSTRING_INDEX(dt, ' ', 1),       -- MM
                                        'January', 'February', 'March',
                                        'April', 'May', 'June', 'July',
                                        'August', 'September', 'October',
                                        'November', 'December'),
                                  2, '0')
                          || '-'
                          || LPAD(SUBSTRING_INDEX(                         -- DD
                                              SUBSTRING_INDEX(dt, ',', 1),
                                  ' ', -1), 2, '0')
                          || ' '
                          || SUBSTRING_INDEX(dt, ' ', -1);                 -- hh:mm:ss
      
      ALTER TABLE tbl CHANGE dt dt DATETIME;
      

      【讨论】: