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. 减治算法之寻找第K小元素问题

    一.问题描写叙述 给定一个整数数列,寻找其按递增排序后的第k个位置上的元素. 二.问题分析 借助类似快排思想实现pation函数.再利用递归思想寻找k位置. 三.算法代码 public static ...

  2. linux下信息分屏显示

    在字符界面下,经常遇到ls之后信息太长,只能看到最后一页的信息,这时就需要分屏显示了. 常用: ls | less 这样就可以分屏显示了,并可以用PgUp和PgDn来上下翻页. 也可以用: ls | ...

  3. 将最大主机/ DNS名称字符长度从63增加到255

    https://mp.weixin.qq.com/s/WcjaAgAOvEhjtP2nXx5Fhw Zabbix 4.0.0alpha8发行说明 运维帮 昨天 Zabbix团队很高兴地宣布Zabbix ...

  4. Struts2中ValueStack结构和总结

    [ValueStack和ActionContext的关系] 首先,从结构上来看ValueStack是ActionContext的一个组成部分,是对ActionContext功能的扩展.ActionCo ...

  5. SQL Server 2012 从备份中还原数据库

    1.首先把原数据库备份,检查原数据库的日志文件是否太大,如果过于大应该先收缩数据库日志 2.把备份的数据库文件在目标SQL Server还原,点击数据库,选择“还原文件或文件组” 3.如果需要修改还原 ...

  6. 有关 enum的重新理解

    有关enum 的再次理解: 所有的枚举都继承自java.lang.Enum类. 说到底enum也只是一个java类,只不过他有几个特殊的点.   1.enum中的各个实例,就是enum的static实 ...

  7. java垃圾回收机制的使用

    public class Test { public static void main(String[] args) throws Exception { Book b=new Book(true); ...

  8. UVA11383 Golden Tiger Claw —— KM算法

    题目链接:https://vjudge.net/problem/UVA-11383 题解: 根据KM()算法,标杆满足:l(x) + l(y) >= w(x, y) . 当求完最大权匹配之后,所 ...

  9. POJ2912 Rochambeau —— 种类并查集 + 枚举

    题目链接:http://poj.org/problem?id=2912 Rochambeau Time Limit: 5000MS   Memory Limit: 65536K Total Submi ...

  10. javascript 省、市、地县三级联动

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HEAD&g ...