业务背景
今天接到项目提出的一个技术难题,需求大概是这样的。
数据库中有两列,都是以英文逗号(分隔符)隔开的字符串,需要在sql文中判断出第二列是否包含第一个中按分隔符拆分成数组中的任意元素。
┐(‘~`;)┌
┐(‘~`;)┌
┐(‘~`;)┌
解决方案
怎么会有这么奇葩的需求,想了好久,貌似直接通过语法写不出来,上最后王牌:自定义函数。
/*
校验v2(以指定符号分隔的字符串)中是否包含v1(以指定符号分隔的字符串)中项。
eg: v1='1,2,3',v2='4,5,6' 不包含,返回0
v1='1,2,5',v2='4,5,6' 包含,返回3
author : kindey.s
date : 2020-03-04
*/
CREATE FUNCTION v2_if_include_v1_item (v1 VARCHAR(4000),v2 VARCHAR(4000)) RETURNS int(11)
begin
declare sc VARCHAR(1); -- 分隔符
declare item VARCHAR(4000); -- 当前验证项
declare leaveItem VARCHAR(4000); -- 剩余需要验证项
declare pos int; -- 当前第一个分隔符位置
declare existIndex int; -- 包含的位置,如果是0