我有一个名为招标的表名,其中包含如下详细信息:
+-------------------------------+
| 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
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]]1[[:>:]]"为了设置or条件,我使用
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]](1|2)[[:>:]]"但是我想写一个查询where扇区字段既不存在1也不存在2。输出应包含除1和2之外的每隔一个扇区。
发布于 2018-08-11 17:07:48
谢谢你的回答。
实际上,很容易就能得到输出。
我只写了这样的查询
SELECT * FROM `tenders` WHERE sector NOT REGEXP "[[:<:]](1|2)[[:>:]]"我得到了输出。
发布于 2018-08-11 15:45:36
根据您的MySQL版本,您可以使用REGEXP_REPLACE或REGEXP。TRIM和CONCAT将完成此任务(基于1和2):
如果您使用的是MySQL >= 8.0,则可以使用REGEXP_REPLACE函数:
SELECT id,
TRIM(BOTH ',' FROM REGEXP_REPLACE(CONCAT(',',Sector,','),'(,1)|(,2)',''))
FROM tenders;对于MySQL Mysql < 8.0,可以使用REPLACE函数。
SELECT id,
TRIM(BOTH ',' FROM REPLACE(REPLACE(CONCAT(',',Sector, ','),',2',''),',1',''))
FROM tenders;发布于 2018-08-11 16:57:30
这里不需要正则表达式,只需用逗号将您的Sector列包装起来,这样列表中的每个数字都在逗号之间,然后您可以通过查找,[number], (例如.,1,)在连接列中。
下面是查询:
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 listhttps://stackoverflow.com/questions/51797327
复制相似问题