mysql 判断字符串是否为其他字符串的子集
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 判断字符串是否为其他字符串的子集的更多相关文章
- Mysql查找如何判断字段是否包含某个字符串
Mysql查找如何判断字段是否包含某个字符串 有这样一个需求,在Mysql数据库字符串字段(权限)中,用户有多个不同的邮箱,分别被‘,’分开,现在要取出某个邮箱的所有成员列表. 假设有个表: ...
- mysql判断表里面一个逗号分隔的字符串是否包含单个字符串、查询结果用逗号分隔
1.mysql判断表里面一个逗号分隔的字符串是否包含单个字符串 : FIND_IN_SET select * from tablename where FIND_IN_SET(传的参数,匹配字段) 例 ...
- 好记性不如烂笔头-Mysql查找如何判断字段是否包含某个字符串
好记性不如烂笔头-Mysql查找如何判断字段是否包含某个字符串 利用mysql 字符串函数 find_in_set(); SELECT * FROM users WHERE find_in_set(' ...
- mysql判断一个字符串是否包含某子串 【转】
文章出处:mysql判断一个字符串是否包含某子串 使用locate(substr,str)函数,如果包含,返回>0的数,否则返回0 例子:判断site表中的url是否包含'http://'子串, ...
- C#算法之判断一个字符串是否是对称字符串
记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...
- MYSQL 常用函数(数学、字符串、日期时间、系统信息、加密)
一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...
- MySQL中concat函数(连接字符串)
MySQL中concat函数使用方法:CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意:如果所有参数均为非二进制字符串 ...
- Mysql学习笔记(四)字符串函数
PS:终于看完了字符串函数,心都快碎了...涉及的函数真是太多了...感觉这里的字符串函数和JAVA里的基本都差不多了...基本上算是掌握了,但是想全记住那是不太可能的... 学习内容: 字符串函数的 ...
- String的两个API,判断指定字符串是否包含另一字符串,在字符串中删除指定字符串。
// 在字符串中删除指定字符串. String phoneNum="1795112345"; phoneNum = phoneNum.replace("17951&quo ...
- php 判断字符串在另一个字符串中位置
$email='user@example.com'; //定义字符串$result=strstr($email,'@'); //返回子字符串echo $result; / ...
随机推荐
- mongo11---Access control is not enabled for the database
今天使用MongoDB时遇到了一些问题 建立数据库连接时出现了warnings 出现这个警告的原因是新版本的MongDB为了让我们创建一个安全的数据库 必须要进行验证 后来在外网找到了答案 解决方案如 ...
- Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard http://silverlightchina.net/html/tips/2010/0329/934.html
Expression Blend实例中文教程(8) - 动画设计快速入门StoryBoard 时间:2010-03-29 11:13来源:SilverlightChina.Net 作者:jv9 点击: ...
- frameset 框架整体退出登录的问题
1 设置其他的页面都验证session,如果session不存在就跳转到 Login 页: 2 Login中添加下面的js代码: <script language="JavaScrip ...
- BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图
BZOJ_1195_[HNOI2006]最短母串_AC自动机+BFS+分层图 Description 给定n个字符串(S1,S2,„,Sn),要求找到一个最短的字符串T,使得这n个字符串(S1,S2, ...
- DP专题之概率DP
注意:在概率DP中求期望要逆着推,求概率要正着推 概率DP求期望: 链接: http://acm.hdu.edu.cn/showproblem.php?pid=4405 dp[ i ]表示从i点走到n ...
- AutoIT: 句柄的妙用
句柄是独一无二的,很多时候,Title,Command都可以用句柄来代替.以下写法是能够起一样的作用. $handle= WinGetHandle("autoit cn") $ct ...
- http_load常见问题及解决方案
1.错误信息:byte count wrong http_load在处理时会去关注每次访问同一个URL返回结果(即字节数)是否一致,若不一致就会抛出byte count wrong 所以动态页面可以忽 ...
- bzoj 3714 [ PA 2014 ] Kuglarz —— 思路+最小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3714 因为每个杯子下最多一个小球,所以从奇偶性就可以看出有没有球: 询问一段区间,等于知道一 ...
- WebDriverWait显示等待
等待页面加载完成,找到某个条件发生后再继续执行后续代码,如果超过设置时间检测不到则抛出异常 WebDriverWait(driver, timeout, poll_frequency=0.5, ign ...
- poj 2411((多米诺骨牌问题))
Mondriaan's Dream Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 12854 Accepted: 748 ...