SQL截取查询结果中固定字段之间的内容

在做数据查询时,字段存了冗余的内容,希望查询结果只需要客户填写的中文数据,数据展示如下

idcustom_content
10000{“customField4”:“墙面修缮维修”}
10001{“customField4”:“墙面、隔断、水池、地砖修缮装修”}
10002{“customField4”:“施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时”}
10003{“customField4”:“施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时”}

期望结果是将上述表格中的中文结果查询出来
MySQL的截取函数有MID,SUBSTR,SUBSTRING,LEFET,RIGHT
我们采用mid方式来做截取,分析数据规律前17位,后2为数据是多余的,但中间的位数是不确定。
而mid(str,a,b)函数是截取str从a为开始,到a+b位,在本次查询时,b是不确定的,以10000为例,b应该是6。

SELECT MID(custom_content,18,6) FROM table_name
idMID(custom_content,18,6)
10000墙面修缮维修
10001墙面、隔断、
10002施工方应具备
10003施工方应具备

如上结果其他不满足,因此采用POSITION函数来确定b的位数,匹配后面的双引号的位置

SELECT id, POSITION('"}' in custom_content) FROM table_name
idPOSITION(’"}’ in custom_content)
1000024
1000133
10002146
10003146

采用如上两个函数,因为起始是从18位开始的,要给双引号的位置减去18,结合起来就得到如下的结果

SELECT id,MID(custom_content,18,POSITION('"}' in custom_content)-18) from table_name
idMID(custom_content,18,POSITION(’"}’ in custom_content)-18)
10000墙面修缮维修
10001墙面、隔断、水池、地砖修缮装修
10002施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时
10003施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时

听说有正则的函数REGEXP快速实现,查了一下貌似只能用于条件使用,跟like差不多,大家有其他更方便的办法,欢迎评论。
该方法存在不足的地方是,没办法像正则表达式一样提取两个字符中间的字符串般自由

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值