SQLite学习笔记-多个分隔符分割字符串并删除后缀

SQLite单个分隔符分割字符串删除后缀实现很简单

SELECT 'aaa-bbb-ccc-ddd-eee', SUBSTR('aaa-bbb-ccc-ddd-eee', 0, LENGTH(RTRIM('aaa-bbb-ccc-ddd-eee', REPLACE('aaa-bbb-ccc-ddd-eee', '-', ''))));

SQLite多个分隔符分割字符串需要借助递归查询实现

多个分隔符分割字符串递归查询过程:i 记录分隔符坐标位置 input 记录下一次递归查询的字符串 origin 记录原始字符串 

当前字符串中无法定位多个分隔符坐标的时候终止递归查询

示例中均是以 '-1' 作为多个分隔符 T_TABLE作为数据库表 COL作为数据库表中一个字段列

WITH SP(i, input, origin) AS (
   SELECT DISTINCT 1, COL, COL FROM T_TABLE WHERE (LENGTH(COL) - LENGTH(REPLACE(COL, '-1', ''))) / LENGTH('-1') > 0
   UNION
   SELECT INSTR(input, '-1') + LENGTH('-1') - 1, SUBSTR(input, INSTR(input, '-1') + LENGTH('-1')), origin FROM SP WHERE INSTR(input, '-1') != 0
) SELECT i, input, origin FROM SP;

聚合计算出最后一个多字符分割的位置,取出位置之前的子字符串

WITH SP(i, input, origin) AS (
   SELECT DISTINCT 1, COL, COL FROM T_TABLE WHERE (LENGTH(COL) - LENGTH(REPLACE(COL, '-1', ''))) / LENGTH('-1') > 0
   UNION
   SELECT INSTR(input, '-1') + LENGTH('-1') - 1, SUBSTR(input, INSTR(input, '-1') + LENGTH('-1')), origin FROM SP WHERE INSTR(input, '-1') != 0
) SELECT SUM(i) AS pos, origin, SUBSTR(origin, 0, SUM(i) - LENGTH('-1')) AS substring FROM SP GROUP BY origin;

SQLite多个分隔符分割字符串并删除后缀

WITH SP(i, input, origin) AS (
   SELECT DISTINCT 1, COL, COL FROM T_TABLE WHERE (LENGTH(COL) - LENGTH(REPLACE(COL, '-1', ''))) / LENGTH('-1') > 0
   UNION
   SELECT INSTR(input, '-1') + LENGTH('-1') - 1, SUBSTR(input, INSTR(input, '-1') + LENGTH('-1')), origin FROM SP WHERE INSTR(input, '-1') != 0
) UPDATE T_TABLE SET COL = (SELECT SUBSTR(b.ORIGIN, 0, b.POS - LENGTH('-1')) FROM (SELECT SUM(i) AS POS, origin AS ORIGIN FROM SP GROUP BY origin) b 
WHERE T_TABLE.COL = b.ORIGIN) WHERE (LENGTH(COL) - LENGTH(REPLACE(COL, '-1', ''))) / LENGTH('-1') > 0;

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值