按1 SQL递增月数

按1 SQL递增月数,sql,postgresql,Sql,Postgresql,我需要更新一个增加1的列值,该列是month_number,定义为整数,当月份为12时,我需要更新为1,而不是13 我首先尝试了这种方法: update tab set col_month = col_month + 1 但不适用于col_month为12的情况,这里有一种使用case语句的方法: update tab set col_month = case when col_month = 12 then 1 else col_month + 1 end 我认为你还是应该用日期来代替日期

我需要更新一个增加1的列值,该列是month_number,定义为整数,当月份为12时,我需要更新为1,而不是13

我首先尝试了这种方法:

update tab
set col_month = col_month + 1

但不适用于col_month为12的情况,这里有一种使用
case
语句的方法:

update tab
set col_month = case when col_month = 12 then 1 else col_month + 1 end

我认为你还是应该用日期来代替日期。例如:

select extract( month from now() + '5 month'::interval)::int; 

给你1,不是13。它是
int
,如您所愿。而且你也不会发明一个带有
case
或所有case的轮子。

我认为最简单的方法是使用模运算符
%

UPDATE
    tab
SET
    col_month = (col_month % 12) + 1

模运算符为您提供范围0-11(12更改为0),您只需添加1。

col\u month是什么类型的?创建表时有约束吗?类型是整数,我有一个约束,col_month是FK,它引用了一个表,其中定义了我的月份,所以col_month只能在间隔[1,12]内,如果您有类似CHECK col_month>=1和CHECK col_month的内容,我相信下面的答案可以回答它。这确实很简洁