原始数据
a = {"cheng2_shi4":"上海"}
要求
获取该字段的城市名称
语句
select substr((case when a like '%cheng%shi%' then a else null end)
,instr((case when a like '%cheng%shi%' then a else null end),'":"')+length('":"')
,instr((case when a like '%cheng%shi%' then a else null end),'"}')-instr((case when a like '%cheng%shi%' then a else null end),'":"')-length('":"')) as '城市'
from a
最外层:
截取字符:substr("需要进行截取的字段","从第几个字符开始","截取几个字符")
"需要进行截取的字段":
A是一个筐,里面什么都有,需要先找到其中含有城市信息的a
case when a like '%cheng%shi%'
then a
else null
end
"从第几个字符开始":
重点是要找到目标字符串前后独一无二的识别标志,这个情况用了A中的 ":"
作为识别标志
- 从第几个字符开始 = 标志符所在的位置+标志符自身的长度(如下)
instr(
(case when a like '%cheng%shi%'
then a
else null
end),'":"')
+length('":"')
- 找到字符串位置:instr("进行施工的字符串(大)","在其中寻找的字符串(小)")
"截取几个字符":
- 截取几个字符 = 目标字符串结束的位置(根据结尾标志符来定位) - 目标字符串开始的位置(根据开始标志符来定位)
instr((case when a like '%cheng%shi%' then a else null end),'"}')
-(instr((case when a like '%cheng%shi%' then a else null end),'":"')
+length('":"'))
- 其实完整版应该是这样:截取几个字符 = 目标字符串结束的位置(根据结尾标志符来定位)-1 - 目标字符串开始的位置(根据开始标志符来定位)+1*