SQLite截取字符串中两个指定字符中间的子字符串


一、简述

由于SQLite没有函数可支持一次性提取子字符串,因此将使用嵌套查询的方法实现查询和更新

二、代码

方法一:

select substr(cqzh,instr(cqzh,'第')+1,instr(cqzh,'号')-instr(qlrtxdz,'第') from t1

说明:当不存在“第”字时,instr(cqzh,'第') 返回0,查询结果将为“号”字之前的所有字符

方法二:

首先直接附上查询的SQL语句

// 查询第~号之间的字符,如:北京第5号,则查询结果为5
select replace(a.cqzh,'号','') final
from (
      select replace(cqzh,s.bb,'') cqzh, s.temp
      from (
           select cqzh, substr(cqzh,1,instr(cqzh,'第')) bb,temp
           from t1)
           s)
		a ;

这段SQL语句可用来查询字段值指定两个字符‘第’和‘号’中间的字符串,查询前的表和查询后的结果如下图

查询前原数据表:
在这里插入图片描述
查询的结果表:
在这里插入图片描述
此时,若想更新final里的值到temp列,可加入update语句,同时加上一个唯一值列,用于匹配对应的行,再附上更新的SQL语句

// 更新final列到temp列
update t1 set temp = (select replace(a.cqzh,'号','') final
                  	from (
                        select replace(cqzh,s.bb,'') cqzh, s.temp,s.id 
                        from (
                              select cqzh, substr(cqzh,1,instr(cqzh,'第')) bb,temp,id 
                              from t1)
                         	  s)
                        a where cqzh is not null and a.id = t1.id)
//注意:where条件需在括号内

更新后的结果表:
在这里插入图片描述

三、总结

1.更新同一张表时,update(需要将where的条件写进括号内)
2.更新需要唯一值做连接条件
3.有人说截尾可用length()-1,以后再试

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值