SQL过程:将特定行更新为当前系统年份

问题描述 投票:1回答:1

嗨我需要创建一个过程来将特定行更新为“当前年份”,无论当前年份是在执行该功能时。如果可以在不需要指定月份或日期的情况下完成,允许将多个日期更新到最近一年而不影响日期,这将是理想的。

我的搜索的大多数帖子/结果导致了解如何选择当前年份的项目,但我找不到关于设置当前年份的任何内容(无需手动输入或使用ADD DATE)。

我目前的名为tblevents的表格如下

|EventID|StartDate          |EndDate            |EventFee|  
|1      |2005-12-20 00:00:00|2005-12-20 00:00:00|350     |  
|2      |2005-12-20 00:00:00|2005-12-20 00:00:00|320     |  
|3      |2005-12-20 00:00:00|2005-12-20 00:00:00|100     |  
|4      |2005-12-20 00:00:00|2005-12-20 00:00:00|200     |  
|5      |2005-12-20 00:00:00|2005-12-20 00:00:00|650     |  

我第一次尝试只是通过使用UPDATE执行查询来习惯它,到目前为止我已经尝试了很多变种

UPDATE `tblevents` 
SET `StartDate` = '(SELECT YEAR(CURDATE()))-12-20', `EndDate` = '(SELECT 
YEAR(CURDATE()))-12-20'
WHERE `EventID`=3;

并试过这个:

SELECT YEAR(CURDATE()) AS 'CYEAR';
UPDATE tblevents SET `StartDate` = 'CYEAR-12-05', `EndDate` = 'CYEAR-12-07'
WHERE `EventID`=3;

我想知道更新查询出错的地方,以及如何使用过程完成此操作。

我要么收到语法错误,要么将日期设置为0000-00-00 00:00:00

mysql sql
1个回答
1
投票

如果要将日期设置为当前年份,可以使用日期操作:

UPDATE tblevents 
    SET StartDate = str_to_date(concat_ws('-', year(curdate()), month(startdate), day(startdate)),  '%Y-%m-%d),
        endDate = str_to_date(concat_ws('-', year(curdate9)), month(enddate), day(enddate), '%Y-%m-%d')
WHERE EventID = 3;
© www.soinside.com 2019 - 2024. All rights reserved.