我不是那么喜欢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
如何实现像这样的大规模更新查询?
4条答案
按热度按时间bksxznpy1#
如果要更新开始日期并添加10天,可以执行以下操作:
对于结束日期,如果您想要每月的最后一天,请使用函数last\u day将返回每月的最后一天:
y1aodyip2#
我想做一个大规模的更新,只更改数据库中每个记录的开始日期和结束日期字段的日期部分。
问题是我不能使用固定日期进行更新,但我必须这样做:
获取正在更新的记录的“开始日期/结束日期”字段的“日期”部分,并添加10天。
您需要有一个不带where子句的update查询来更新数据库中的每个记录。
此查询将在列开始日期和结束日期内的现有数据上添加10天
jucafojl3#
我们可以使用date\u add()函数
72qzrwbm4#
你可以用
addtime()
: