SQL REPLACE в столбце 1 и ОБНОВЛЕНИЕ в столбце 2 одновременно - PullRequest
0 голосов
/ 07 января 2019

У меня есть база данных SQLite с 2 столбцами CITY / YEAR, как это. Город CITY имеет фактически город и год в одном столбце (это предназначено).

   1. Paris-2018               / 2018
   2. Berlin-2018              / 2018
   3. Rome-2018] [wrong data   / g Data
   4. Stockholm-2019           / 2019
   6. La-Paz-2018              / 2019
   5. London-2018] [wrong data / g Data

В столбце CITY и YEAR 9% строк содержат данные дерьма, которые всегда начинаются с "] [....." после правильной строки в CITY и просто данные дерьма в YEAR. Я хочу удалить «] [.....» из всех затронутых строк в CITY И одновременно установить столбец YEAR для этих строк в строку после последнего «-» в строке CITY.

Как я мог это сделать? Результат должен выглядеть так:

   1. Paris-2018               / 2018
   2. Berlin-2018              / 2018
   3. Rome-2018                / 2018
   4. Stockholm-2019           / 2019
   6. La-Paz-2018              / 2019
   5. London-2018              / 2018

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Необходимо применить условное обновление, поскольку в столбце есть чистые и не чистые значения city:

update tablename
set 
  city = case 
           when instr(city,']') > 0 then substr(city, 1, instr(city, ']') - 1)
           else city
         end, 
  year = case 
           when instr(city,']') > 0 then substr(city, instr(city,']') - 4, 4)
           else substr(city, length(city) - 3, 4)
         end;

См. Демоверсию

0 голосов
/ 07 января 2019

Не могли бы вы сделать это только с помощью substr / instr?

Исправленный город / год будет выглядеть примерно так: substr(cityyear,1,instr(cityyear,']')-1).

Скорректированный год будет выглядеть примерно так: substr(cityyear,instr(cityyear,'-2') +1,4) (при условии, что все годы в этом столетии). Если в других столетиях есть годы, вы можете использовать оператор (ы) CASE.

(и обновлять только строки, содержащие ], возможно, с where instr(cityyear,']') > 0)

...