MySQL查询从不同列复制日期

时间:2009-09-27 16:19:28

标签: sql mysql datetime

我有以下6个整数db列:

  • 小时
  • 分钟
  • 第二

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

4 个答案:

答案 0 :(得分:1)

您可以将它们全部放入字符串中,然后将该字符串转换为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)

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

您可以将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');

答案 3 :(得分:0)

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;