列1中的SQL REPLACE和列2中的UPDATE同时进行

时间:2019-01-07 16:41:14

标签: regex sqlite replace sql-update pattern-matching

我有一个这样的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 :(得分:0)

您可以只使用substr / instr吗?

校正后的城市/年份类似于substr(cityyear,1,instr(cityyear,']')-1)

校正后的年份将类似于substr(cityyear,instr(cityyear,'-2') +1,4)(假设本世纪的所有年份)。如果在其他世纪中存在年份,则可以使用CASE语句。

(并且仅更新包含]的行,也许使用where instr(cityyear,']') > 0

答案 1 :(得分:0)

您必须应用条件更新,因为列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;

请参见demo