话不多说,上例子,下面截图是数据表的一个备注字段,我需要找到当前患者的入院时间,需要在备注中根据关键字“住院治疗”来查找。
select id,name,if(memo like '%住院治疗%',substring_index(substring_index(substring_index(memo,"住院治疗",1),"[",-1),"]",1),'') as '住院治疗' from guest;
--memo 是备注字段
--思路,首先判断是否有备注住院治疗,有才查询日期,如果没有那就显示为空,所以我这里用了 if 进行判断。
--substring_index(字段,字符,位置) 位置为正数,正序查找,结果值 取 左边
--第一次 substring_index(memo,"住院治疗",1) 在备注中查找住院治疗第一次出现的位置
--第二次 substring_index(substring_index(memo,"住院治疗",1),"[",-1) 根据上一截字符串然后逆向查找 [ ,位置为负数,逆向查找,结果值 取 右边
--第三次 substring_index(substring_index(substring_index(memo,"住院治疗",1),"[",-1),"]",1) 根据上一截字符串然后逆向查找 ] ,位置为正数,正序查找,结果值 取 左边
下面是三次取值的变化: