如何实现向datetime字段的date部分添加n天的大规模更新查询?

iq3niunx  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(260)

我不是那么喜欢db,我有以下问题,我不知道如何才能在一个聪明的方式做。我正在使用mysql
我有一张气象预报表:

CREATE TABLE MeteoForecast (
  id                       BigInt(20) NOT NULL AUTO_INCREMENT,
  localization_id          BigInt(20) NOT NULL,
  seasonal_forecast_id     BigInt(20),
  meteo_warning_id         BigInt(20),
  meteo_forecast_status_id BigInt(20),
  start_date               DateTime NOT NULL,
  end_date                 DateTime NOT NULL,
  min_temp                 TinyInt(4),
  max_temp                 TinyInt(4),
  icon_link                VarChar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL,
  chances_of_rain          TinyInt(11),
  wind                     TinyInt(1),
  humidity                 TinyInt(11), 
  PRIMARY KEY (
      id
  )
) ENGINE=InnoDB AUTO_INCREMENT=1872 ROW_FORMAT=DYNAMIC DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
ALTER TABLE MeteoForecast COMMENT = '';

这张表的每条记录代表一个天气预报。
目前包含一些模拟测试数据,这些数据必须进行大量更新。
如您所见,此表包含以下两个日期时间字段:包含预测时间范围的开始日期和结束日期。
这些字段是datetime,因为时间框架如下所示:

start_date = 31/05/2018 12:00:00
end_date   = 31/05/2018 18:00:00

问题是,我有很多记录,在一段时间后到期(因为天过去了,这些预测是在过去…)。
我想做一个大规模的更新,只更改数据库中每个记录的开始日期和结束日期字段的日期部分。
问题是我不能使用固定日期进行更新,但我必须这样做:
获取正在更新的记录的“开始日期/结束日期”字段的“日期”部分,并添加10天。
考虑到前面的例子:

start_date = 31/05/2018 12:00:00
end_date   = 31/05/2018 18:00:00

必须变成这样:

start_date = 10/06/2018 12:00:00
end_date   = 31/06/2018 18:00:00

如何实现像这样的大规模更新查询?

bksxznpy

bksxznpy1#

如果要更新开始日期并添加10天,可以执行以下操作:

UPDATE MeteoForecast SET start_date = start_date + INTERVAL 10 DAY;

对于结束日期,如果您想要每月的最后一天,请使用函数last\u day将返回每月的最后一天:

UPDATE MeteoForecast SET end_date = LAST_DAY(start_date);
y1aodyip

y1aodyip2#

我想做一个大规模的更新,只更改数据库中每个记录的开始日期和结束日期字段的日期部分。
问题是我不能使用固定日期进行更新,但我必须这样做:
获取正在更新的记录的“开始日期/结束日期”字段的“日期”部分,并添加10天。
您需要有一个不带where子句的update查询来更新数据库中的每个记录。
此查询将在列开始日期和结束日期内的现有数据上添加10天

UPDATE
 MeteoForecast 
SET
   MeteoForecast.start_date = MeteoForecast.start_date + INTERVAL 10 DAY
 , MeteoForecast.end_date = MeteoForecast.end_date + INTERVAL 10 DAY
jucafojl

jucafojl3#

我们可以使用date\u add()函数

UPDATE MeteoForecast SET start_date = DATE_ADD(start_date, INTERVAL 10 DAY) , end_date = DATE_ADD(end_date, INTERVAL 10 DAY)
72qzrwbm

72qzrwbm4#

你可以用 addtime() :

update MeteoForecast
    set start_date = addtime(cast('2018-06-10' as datetime), time(start_date)),
        end_date = addtime(cast('2018-06-10' as datetime), time(end_date));

相关问题