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. 最齐全的站点元数据meta标签的含义和使用方法

    最齐全的站点元数据meta标签的含义和使用方法 随着HTML5的流行和Web技术的不断演变,Meta标签队伍也越来越壮大,从Windows XP的IE6到现在Windows 7.Windows 8的I ...

  2. Java小白手记:SSH

    以下内容只是一个小白菜鸟的理解和总结,目的仅在于梳理思路. 13年的时候,我就说要学JAVA,有个C++高手同事赞许地说:"嗯,不错,SSH..."我不禁肃然起敬.SSH!多么高大 ...

  3. Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content

    Content-Type https://tools.ietf.org/html/rfc7231#section-3.1.1.5 https://tools.ietf.org/html/rfc7231 ...

  4. FunsionCharts Demo

    原文路径:http://www.cnblogs.com/xuhongfei/archive/2013/04/12/3016882.html 一.简介 Ø FusionCharts 是InfoSoft  ...

  5. mysql17---增量备份

    mysql增量备份: 全备份是: (增量备份一定要看日志的时间和位置节点) mysql数据库会以二进制的形式,把用户对mysql数据库的操作记录到文件中,不用使用定时器了.当用户希望恢复的时候,可以使 ...

  6. Mac mysql 运行sql文件中文乱码的问题

    别再傻傻的改什么mysql的编码格式了. 是.sql文件的编码有问题,把sql文件的编码格式改成utf-8就行了. mac怎么修改呢? vscode最爽了. 用vscode打开.sql文件,然后点右下 ...

  7. POSTMAN模拟数组数据

    有时候写接口,需要传入数据数据.比如购物车中的一组商品.它们的数量是不固定的,只能用数组才能更好的处理. 怎么用POSTMAN模拟呢? 万能的POSTMAN.

  8. 二、Log4j基本使用方法

    转自:https://blog.csdn.net/luohai859/article/details/52250807 Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息 ...

  9. 【转载】HTML5自定义data属性

    可能大家在使用jquery mobile时,经常会看到data-role.data-theme等的使用,比如:通过如下代码即可实现页眉的效果:   [html]  <div data-role= ...

  10. python 高阶函数二 map()和reduce()

    一.map()函数 map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回. >>> fro ...