代码之家  ›  专栏  ›  技术社区  ›  Germstorm Pierre-Alain Vigeant

从不同列复制日期的MySQL查询

  •  1
  • Germstorm Pierre-Alain Vigeant  · 技术社区  · 15 年前

    我有以下6个整数db列:

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

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

    4 回复  |  直到 15 年前
        1
  •  1
  •   Greg    15 年前

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

    UPDATE my_table
    SET my_date = CONCAT(my_year, '-', my_month, '-', my_day, ' ',
        my_hour, ':', my_mins, ':', my_seconds)
    WHERE ...
    
        2
  •  1
  •   Eric    15 年前

    您可以将它们全部放入一个字符串中,然后将该字符串转换为 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
  •  0
  •   Paul Dixon    15 年前

    你可以使用 CONCAT 将数据组合在一起,使其看起来像日期时间值

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

    虽然可以直接使用它,但也可以通过使用 STR_TO_DATE 有了它,例如

    STR_TO_DATE(
       CONCAT(year,'-', month, '-', day,' ',hour, ':', min, ':', sec),
       '%Y-%m-%d %H:%i:%S');
    
        4
  •  0
  •   Anatoliy    15 年前
    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;