首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REGEXP for not exist number in comma string

REGEXP for not exist number in comma string
EN

Stack Overflow用户
提问于 2018-08-11 15:04:30
回答 4查看 80关注 0票数 0

我有一个名为招标的表名,其中包含如下详细信息:

代码语言:javascript
复制
+-------------------------------+
|  id     |    Sector           |
+-------------------------------+
|  1      |    1,3,5,9,7        |
+-------------------------------+
|  2      |    2,6,4,7,9,20     |
+-------------------------------+
|  3      |    1,2,3,55,47,52   |
+-------------------------------+
|  4      |    51,2,36,5,4,9,1  |
+-------------------------------+

我使用mysql查找值时使用了REGEXP

代码语言:javascript
复制
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]]1[[:>:]]"

为了设置or条件,我使用

代码语言:javascript
复制
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]](1|2)[[:>:]]"

但是我想写一个查询where扇区字段既不存在1也不存在2。输出应包含除12之外的每隔一个扇区。

EN

回答 4

Stack Overflow用户

发布于 2018-08-11 17:07:48

谢谢你的回答。

实际上,很容易就能得到输出。

我只写了这样的查询

代码语言:javascript
复制
SELECT * FROM `tenders` WHERE sector NOT REGEXP "[[:<:]](1|2)[[:>:]]"

我得到了输出。

票数 1
EN

Stack Overflow用户

发布于 2018-08-11 15:45:36

根据您的MySQL版本,您可以使用REGEXP_REPLACEREGEXPTRIMCONCAT将完成此任务(基于12):

如果您使用的是MySQL >= 8.0,则可以使用REGEXP_REPLACE函数:

代码语言:javascript
复制
SELECT id, 
TRIM(BOTH ',' FROM REGEXP_REPLACE(CONCAT(',',Sector,','),'(,1)|(,2)','')) 
FROM tenders;

对于MySQL Mysql < 8.0,可以使用REPLACE函数。

代码语言:javascript
复制
SELECT id, 
TRIM(BOTH ',' FROM REPLACE(REPLACE(CONCAT(',',Sector, ','),',2',''),',1','')) 
FROM tenders;

You can see a working example on DB Fiddle

票数 0
EN

Stack Overflow用户

发布于 2018-08-11 16:57:30

这里不需要正则表达式,只需用逗号将您的Sector列包装起来,这样列表中的每个数字都在逗号之间,然后您可以通过查找,[number], (例如.,1,)在连接列中。

下面是查询:

代码语言:javascript
复制
select id,
       Sector
from tbl
where locate(',1,', concat(',', Sector,',')) = 0 --1 is not in the list
  and locate(',2,', concat(',', Sector,',')) = 0 --and 2 is not in the list

Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51797327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档