最近接触一个很奇葩的需求,字段中是用户的故障描述,我需要从一大段不规律的文字中截取到用户的联系电话或地址。比如从"我家宽带突然连不上了!都没动过就连不上了,能不能快点找个师傅来修宽带啊!麻烦快点!很急!!\n地址:广东深圳南山区XXXXXXXX\n联系电话:13311223344。"中取出地址和联系电话,只能想到结合CHARINDEX和SUBSTRING进行取数,下面来分享一下操作。
先给结论,只说一下取地址的方法,取联系电话同理:
substring(
-- 截取'\n地址:'之后的字符串
substring(
客户投诉故障情况,
-- 取 '\n地址:' 的索引开始位置
CHARINDEX('\n地址:',客户投诉故障情况) + 4,
255
),
0,
-- 取'\n联系电话:'的索引开始位置
CHARINDEX(
'\n联系电话:',
substring(
客户投诉故障情况,
CHARINDEX('\n地址:',客户投诉故障情况) + 4,
255
)
)
)
怎么个意思呢,取出地址可以看成是取'\n地址:'之后到'\n联系电话:'之前的字符串,先利用 CHARINDEX得到'\n地址:'的索引位置a,利用SUBSTRING将地址前的无用字符串截断,再通过CHARINDEX拿到'\n联系电话:'的索引位置b,于是就可以再用SUBSTRING从0开始截取到b的位置。
可以简单套一下试试
SELECT SUBSTRING('ABC123DEF', CHARINDEX('123','ABC123DEF'), 3)
-- 结果为123
套的有点多,肯定不是最有效的方法,我目前只能想到这个,大佬们可以给点建议!