我有一个这样的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
答案 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