2016-08-01 2 views
0

мне нужно обновить значение столбца увеличивается на 1, столбец month_number и определяется как целое число, когда месяц 12, мне нужно обновить до 1 вместо 13Приращение номер месяца на 1 SQL

Я впервые попробовал этот подход:

update tab 
set col_month = col_month + 1 

Но не будет работать в тех случаях, когда col_month составляет 12

+1

какой тип col_month? и есть ли у вас ограничение при создании таблицы? –

+0

тип integer, у меня есть ограничение, col_month - это FK, который ссылается на таблицу, где определены мои месяцы, поэтому col_month может быть только в интервале [1,12] –

+0

Если у вас есть что-то вроде CHECK col_month> = 1 AND ПРОВЕРИТЬ col_month <= 12 или что-то, возможно, в вашей таблице создания? –

ответ

3

Вот один метод, использующий case заявление:

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

Я думаю, вы все равно должны работать с датами для дат. Например:

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

Дает 1, а не 13. и это int, как вы хотите. и вы не изобретаете колесо с case или во всех случаях.

4

Я думаю, что самый простой способ - использовать оператор modulo %.

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

оператор Модульное дает диапазон 0 - 11 (12 изменяется на 0) и вам просто нужно добавить 1.

+1

это действительно –

Смежные вопросы