【发布时间】:2009-09-27 16:19:27
【问题描述】:
我有以下 6 个整数 db 列:
- 年份
- 天
- 月
- 小时
- 分钟
- 第二
我需要一个查询,为每一行获取这些值,将它们组合成 DATETIME 并放入另一列。
【问题讨论】:
我有以下 6 个整数 db 列:
我需要一个查询,为每一行获取这些值,将它们组合成 DATETIME 并放入另一列。
【问题讨论】:
这可能不是最有效的,但您可以这样做:
UPDATE my_table
SET my_date = CONCAT(my_year, '-', my_month, '-', my_day, ' ',
my_hour, ':', my_mins, ':', my_seconds)
WHERE ...
【讨论】:
您可以将它们全部放入一个字符串中,然后将该字符串转换为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)
【讨论】:
您可以将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');
【讨论】:
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;
【讨论】: