【问题标题】:MySQL query to copy date from different columnsMySQL查询从不同的列复制日期
【发布时间】:2009-09-27 16:19:27
【问题描述】:

我有以下 6 个整数 db 列:

  • 年份
  • 小时
  • 分钟
  • 第二

我需要一个查询,为每一行获取这些值,将它们组合成 DATETIME 并放入另一列。

【问题讨论】:

    标签: sql mysql datetime


    【解决方案1】:

    这可能不是最有效的,但您可以这样做:

    UPDATE my_table
    SET my_date = CONCAT(my_year, '-', my_month, '-', my_day, ' ',
        my_hour, ':', my_mins, ':', my_seconds)
    WHERE ...
    

    【讨论】:

    • 我需要使用双引号 (") 而不是撇号 ('),但这有效
    【解决方案2】:

    您可以将它们全部放入一个字符串中,然后将该字符串转换为datetime,如下所示:

    update tbl
    set datecol = cast(cast(`year` as varchar) + '-' +
                  cast(`month` as varchar) + '-' + 
                  cast(`day` as varchar) + ' ' +
                  cast(`hour` as varchar) + ':' +
                  cast(`minute` as varchar) + ':' +
                  cast(`second` as varchar) as datetime)
    

    虽然,我认为 MySQL 使用 concat,所以它会是:

    cast(concat(cast(`year` as varchar), '-', cast(`month` as varchar), '-',...) as datetime)
    

    【讨论】:

      【解决方案3】:

      您可以将CONCAT 一起使用您的数据来制作看起来像 DATETIME 值的东西

      CONCAT(year,'-', month, '-', day,' ',hour, ':', min, ':', sec)
      

      虽然您可以直接使用它,但您也可以通过使用 STR_TO_DATE 将其变成真正的 DATETIME,例如

      STR_TO_DATE(
         CONCAT(year,'-', month, '-', day,' ',hour, ':', min, ':', sec),
         '%Y-%m-%d %H:%i:%S');
      

      【讨论】:

        【解决方案4】:
        CREATE TABLE `x` (
          `y` int(4) DEFAULT NULL,
          `m` int(4) DEFAULT NULL,
          `d` int(4) DEFAULT NULL,
          `h` int(4) DEFAULT NULL,
          `i` int(4) DEFAULT NULL,
          `s` int(4) DEFAULT NULL
        );
        INSERT INTO x SELECT 2009, 9, 1, 9, 59, 59;
        SELECT STR_TO_DATE(CONCAT(y,'-', m,'-', d,'-', h,'-', i,'-', s), '%Y-%m-%d-%h-%i-%s') FROM x;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-12
          • 1970-01-01
          • 2013-10-21
          • 2017-09-24
          • 1970-01-01
          • 1970-01-01
          • 2011-06-12
          • 1970-01-01
          相关资源
          最近更新 更多