需要在以下字段内容中提取“调账”后面的金额,应该如何提取?由于字段内容是人工填写的,所以内容不固定,但都会在“调账”后面,而个别会写成“调账”、“调帐”、“调账:”,另外该字段内容还会存在其他数字,请各位帮忙看下要如何才能准备提取到金额。
字段名:录入原因
内容:投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账286.80元/赠款142.2元
需要提取数字为:286.80
字段名:录入原因
内容:投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐187.69元
需要提取数字为:187.69
字段名:录入原因
内容:投诉退赔|BJ202203010955+不认可,减免202202月30元,本次调账:0.01 元 剩余;29.99元赠款录入
需要提取数字为:0.01
什么版本的sqlserver?2005可用正则表单时提取内容,具体参考下面的文章
select dbo.[Regex.Match]('(?<=(调账|调帐)[^\d\.]*?)\d+(\.\d+)?','内容:投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账286.80元/赠款142.2元')
select dbo.[Regex.Match]('(?<=(调账|调帐)[^\d\.]*?)\d+(\.\d+)?','投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐187.69元')
select dbo.[Regex.Match]('(?<=(调账|调帐)[^\d\.]*?)\d+(\.\d+)?','投诉退赔|BJ202203010955+不认可,减免202202月30元,本次调账:0.01 元 剩余;29.99元赠款录入')
完全用自带函数来截取也可以,下列示例中拆解了截取的各个组成部分,方便理解
with t as (
select '投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账286.80元/赠款142.2元' a
union all
select '投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调账187.69元'
)
select a,CHARINDEX('调账',a) tz位置,
CHARINDEX('元',a,CHARINDEX('调账',a)) tz后第一个y位置,
CHARINDEX('元',a,CHARINDEX('调账',a))-CHARINDEX('调账',a)-2 长度,
substring(a,CHARINDEX('调账',a)+2,CHARINDEX('元',a,CHARINDEX('调账',a))-CHARINDEX('调账',a)-2) 截取结果 from t
原数据格式不统一,用case when写4个不同的,反正原理都一样
with t as (
select '投诉退赔|BJ2022022818090/2022年2月/赠费/429元/账后调账:286.80元/赠款142.2元' a
union all
select '投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐187.69元'
union all
select '投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调帐:187.69元'
union all
select '投诉退赔|BJ2022030111371,减免21年8月11-12月22年1月扣费扣费,共计219.78元,调账187.69元'
)
select case
when a like '%调账:%' then
substring(a,CHARINDEX('调账:',a)+3,CHARINDEX('元',a,CHARINDEX('调账:',a))-CHARINDEX('调账:',a)-3)
when a like '%调帐:%' then
substring(a,CHARINDEX('调帐:',a)+3,CHARINDEX('元',a,CHARINDEX('调帐:',a))-CHARINDEX('调帐:',a)-3)
when a like '%调账%' then
substring(a,CHARINDEX('调账',a)+2,CHARINDEX('元',a,CHARINDEX('调账',a))-CHARINDEX('调账',a)-2)
when a like '%调帐%' then
substring(a,CHARINDEX('调帐',a)+2,CHARINDEX('元',a,CHARINDEX('调帐',a))-CHARINDEX('调帐',a)-2)
else null end
截取结果 from t
注意先后顺序就好了,比如必须先判断带冒号的再判断不带冒号的。另外,如果冒号还分了全角半角,就再加两个case when
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!