首页 > 解决方案 > Column1 中的 SQL REPLACE 和 Column 2 中的 UPDATE 同时

问题描述

我有一个 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

标签: regexsqlitereplacesql-updatepattern-matching

解决方案


您必须应用条件更新,因为列中有干净和不干净的值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;

查看演示


推荐阅读