Есть таблица в БД Postgresql c полем number_start в котором были цифры от 0 до 20
Потребовалось заменить из на другие (32400,34200,36000,37800...). Не важно какие. Но первая мысля была такая

update crm_cars_schedule
set number_start=32400
where number_start=0;

update crm_cars_schedule
set number_start=34200
where number_start=1;

.....

как понимаете это копирование нудновато. 20 раз для одного поля! А мне аналогичное нужно сделать с двумя вообще.

Спросила коллегу, он прислал такой вот простой запросик
select a.number_start,(array[20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0])[a.number_start+1]
from crm_cars_schedule a

и был вывод
0 20
1 19
...

Из чего стало понятно, что одной строкой можно заменить все значения.
И вот что сделано
update crm_cars_schedule
set
number_start=(array[32400,34200,36000,37800,39600,41400,43200,45000,46800,48600,50400,52200,54000,55800,57600,59400,61200,63000,64800,66600,68400])[number_start+1]

Это выражение заменить значение number_start равное 0 на 32400, 1 на 34200, 2 на 36000

Очень красиво вышло :)

Комментарии

Популярные сообщения