SQLServer 之 结合CHARINDEX和SUBSTRING截取字符串中的指定字符串

        最近接触一个很奇葩的需求,字段中是用户的故障描述,我需要从一大段不规律的文字中截取到用户的联系电话或地址。比如从"我家宽带突然连不上了!都没动过就连不上了,能不能快点找个师傅来修宽带啊!麻烦快点!很急!!\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

        套的有点多,肯定不是最有效的方法,我目前只能想到这个,大佬们可以给点建议!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值