1.mysql 提供单个用逗号隔开判断某个字符串是否包含在其他字符串的之内:FIND_IN_SET('需要匹配的字符串','源字符串');

demo: select FIND_IN_SET('111','111,22,3333,43') from user;  -- user 是测试表名

  返回值:

   select FIND_IN_SET('7777','111,22,3333,43') from user;

  返回值:

总结:FIND_IN_SET 方法 若包含则返回1 否则返回0;

2:当遇到多个字符串进行匹配的时候,FIND_IN_SET 并不能符合需求,这里是韦恩图的子集逻辑

  demo   strA='11,2,5'   strB='0,11,6,5,2,8'    判断 strA是否是strB的子集

mysql 自带函数:SUBSTRING_INDEX('11,2,5' ,0)  返回值:11

        SUBSTRING(strA,3)   返回:‘2,5’

思路:将strA中的子字符串逐一和strB中的字符串进行比对,只要有一个不存在则返回失败

   第一步:SUBSTRING_INDEX(strA,1)方法能获取通过逗号分割的字符串,temp_str=SUBSTRING_INDEX(strA,1);

   第二步:将获取的字符串用FIND_IN_SET (temp,strB) 进行匹配,若没有与之匹配则将标志位设为失败状态,并且return

   第三步:将已经匹配过的字符串丢弃SUBSTRING(strA,tempStrLen+1);

   重复上述步骤

函数:

drop function if EXISTS fn_sos_product_in_shop;

create function fn_sos_product_in_shop(v_product_conditions varchar(255),v_shop_tags varchar(255)) RETURNS int(1)
begin
DECLARE success_flag int DEFAULT 0; -- 子集标志位 0 默认不是子集,1 是子集
DECLARE cd_length INT DEFAULT 0; -- 被截取之后字符串的剩余长度
DECLARE temp_lenth int DEFAULT 0; -- 临时截取的字符长度
DECLARE check_str varchar(255); -- 临时检查数据集
DECLARE live_str varchar(255); -- 剩余的字符串 if (ISNULL(v_product_conditions) = 1)||(CHAR_LENGTH(trim(v_product_conditions))=0)
then set success_flag = 0;
return success_flag;
end if;
if (ISNULL(v_shop_tags) = 1)||(CHAR_LENGTH(trim(v_shop_tags))=0)
then set success_flag = 0;
return success_flag;
end if;
set cd_length=CHAR_LENGTH(v_product_conditions);
while cd_length >= 1 DO
set check_str=SUBSTRING_INDEX(v_product_conditions,',',1); -- 获取第一个子字符串
                if  CHAR_LENGTH(trim(check_str))>0  -- 这是为了过滤掉空的分割 如:'aaa,,bbb' 中间有多个空逗号
if FIND_IN_SET(check_str,v_shop_tags) = 0 -- 0 表示未匹配上
then set success_flag=0;
return success_flag;
end if;
                end if;
set v_product_conditions=SUBSTRING(v_product_conditions,CHAR_LENGTH(check_str)+2); -- 获取剩余要匹配的字符串
set cd_length=cd_length-CHAR_LENGTH(check_str)-1; -- 剩余的字符长度
set success_flag=1; -- 成功
end while;
return success_flag;
end ;

  0 :表示不是子集 1 表示是子集

select  fn_sos_product_in_shop('111','111,222,333') from user;

  返回值:

select fn_sos_product_in_shop('111,55','111,222,333') from sos_shop;

返回值:

重点:1.为什么不用length 而用char_length length统计的是字节长度,在mysql数据库中一个汉字占三个字符,当都不是汉字的可以用length.char_length 统计字符,不管是否是汉字统计的长度都是一样的。

   2.对于substring 为什么要加2?

  

  

mysql 判断字符串是否为其他字符串的子集的更多相关文章

  1. Mysql查找如何判断字段是否包含某个字符串

    Mysql查找如何判断字段是否包含某个字符串   有这样一个需求,在Mysql数据库字符串字段(权限)中,用户有多个不同的邮箱,分别被‘,’分开,现在要取出某个邮箱的所有成员列表.   假设有个表: ...

  2. mysql判断表里面一个逗号分隔的字符串是否包含单个字符串、查询结果用逗号分隔

    1.mysql判断表里面一个逗号分隔的字符串是否包含单个字符串 : FIND_IN_SET select * from tablename where FIND_IN_SET(传的参数,匹配字段) 例 ...

  3. 好记性不如烂笔头-Mysql查找如何判断字段是否包含某个字符串

    好记性不如烂笔头-Mysql查找如何判断字段是否包含某个字符串 利用mysql 字符串函数 find_in_set(); SELECT * FROM users WHERE find_in_set(' ...

  4. mysql判断一个字符串是否包含某子串 【转】

    文章出处:mysql判断一个字符串是否包含某子串 使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0 例子:判断site表中的url是否包含'http://'子串, ...

  5. C#算法之判断一个字符串是否是对称字符串

    记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...

  6. MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...

  7. MySQL中concat函数(连接字符串)

    MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...

  8. Mysql学习笔记(四)字符串函数

    PS:终于看完了字符串函数,心都快碎了...涉及的函数真是太多了...感觉这里的字符串函数和JAVA里的基本都差不多了...基本上算是掌握了,但是想全记住那是不太可能的... 学习内容: 字符串函数的 ...

  9. String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。

    // 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951&quo ...

  10. php 判断字符串在另一个字符串中位置

    $email='user@example.com';        //定义字符串$result=strstr($email,'@');         //返回子字符串echo $result; / ...

随机推荐

  1. 小贝_mysql优化学习

    mysql优化 简要: 1.数据库设计优化 2.sql语句优化 3.表切割 4.读写分离技术 一.数据库设计优化 1.表设计要符合三范式.当然,有时也须要适当的逆范式 2.什么是三范式 一范式: 具有 ...

  2. 列表和元组的基本操作,for遍历,range

    1,list(增删改查):列表可以装大量数据,不限制数据的类型(int,str,bool, list,tuple,dict,set),表示方法用[  ],list和sttr有区别,list可以直接在原 ...

  3. java实现io读取数据

    ServletInputStream inputStream = request.getInputStream(); BufferedReader br = new BufferedReader(ne ...

  4. bzoj 2744 朋友圈

    题目大意: 两个国家 各有A和B个人,每个人有一个数值. 若两个A国的人满足$val_i\space xor \space val_j \mod 2 =1$ 则他们为朋友 若两个B国的人满足$val_ ...

  5. BZOJ2761:不重复数字(splay效率对比)

    给出N个数,要求把其中重复的去掉,只保留第一次出现的数. 例如,给出的数为1 2 18 3 3 19 2 3 6 5 4,其中2和3有重复,去除后的结果为1 2 18 3 19 6 5 4.   In ...

  6. HDU4642博弈好题

    链接:http://acm.hdu.edu.cn/ 两个人进行翻棋游戏,若a[n][m]为1,则不管先手就可以翻a[n][m]使其为0,这样不管后手翻什么都会使得a[n][m]为1,先手总是有棋可翻: ...

  7. 【POJ 2152】 Fire

    [题目链接] 点击打开链接 [算法] 同样是树形DP,但是比较难,笔者做这题看了题解 令f[i][j]表示在以i为根的子树中 1.在以i为根的子树中建一些消防站 2.在节点j必须建一个消防站 3.以i ...

  8. RobotFramework模拟手机浏览器

    转自 http://blog.csdn.net/max229max/article/details/70808867 感谢max bai提供的思路 Python - Selenium Chrome 模 ...

  9. 警告框在asp.net mvc中应用

    Bootstrap与asp.net MVC框架结合,产生警告框.主要是利用控制器的TempData 字典对象 生成临时数据. ASP.NET MVC的TempData用于传输一些临时的数据,例如在各个 ...

  10. Ubuntu 环境变量及 ADB 配置 (转载)

    转自:http://blog.csdn.net/ithomer/article/details/7307449 同Windows一样,Ubuntu Linux系统包含两类环境变量:系统环境变量和用户环 ...