regex - 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
解决方案
您必须应用条件更新,因为列中有干净和不干净的值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;
查看演示
推荐阅读
- reactjs - 让用户城市和国家反应原生
- laravel - 调用未定义的方法 Illuminate\Database\Query\Builder::makeAllSearchable() Laravel Scout Algolia
- r - 如何“按桶”计算总值?
- java - 在服务开始而不是设定时间后触发警报
- c# - 列表框未发送正确的输出
- c++ - 从邻接列表中删除一条边
- docker - 克服web容器的动态ip
- mqtt - MQTT with IOT:每个 IoT 设备或消息一个 MQTTCLIENT
- neo4j - neo4j 获取符合条件的值
- regex - 正则表达式:更改以字符开头的行的一部分