一、简述
由于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,以后再试