在做数据查询时,字段存了冗余的内容,希望查询结果只需要客户填写的中文数据,数据展示如下
id | custom_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
id | MID(custom_content,18,6) |
---|---|
10000 | 墙面修缮维修 |
10001 | 墙面、隔断、 |
10002 | 施工方应具备 |
10003 | 施工方应具备 |
如上结果其他不满足,因此采用POSITION函数来确定b的位数,匹配后面的双引号的位置
SELECT id, POSITION('"}' in custom_content) FROM table_name
id | POSITION(’"}’ in custom_content) |
---|---|
10000 | 24 |
10001 | 33 |
10002 | 146 |
10003 | 146 |
采用如上两个函数,因为起始是从18位开始的,要给双引号的位置减去18,结合起来就得到如下的结果
SELECT id,MID(custom_content,18,POSITION('"}' in custom_content)-18) from table_name
id | MID(custom_content,18,POSITION(’"}’ in custom_content)-18) |
---|---|
10000 | 墙面修缮维修 |
10001 | 墙面、隔断、水池、地砖修缮装修 |
10002 | 施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时 |
10003 | 施工方应具备室内装修设计及施工的专业能力,预先与我方共同制定装修方案后施工;所有装修用料均需环保无污染,符合国家相关标准要求;施工标准均应符合国家相关标准及规定;施工期间做好室内设备的保护,施工完毕须将实训室内卫生全面清理干净;施工方须按我方要求,在规定时 |
听说有正则的函数REGEXP快速实现,查了一下貌似只能用于条件使用,跟like差不多,大家有其他更方便的办法,欢迎评论。
该方法存在不足的地方是,没办法像正则表达式一样提取两个字符中间的字符串般自由