我有一个表格名称的标书,其中包含以下详细信息:
+-------------------------------+
| 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 |
+-------------------------------+
我使用REGEXP
使用mysql
来找到值
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]]1[[:>:]]"
并设置我使用的or
条件
SELECT * FROM `tenders` WHERE sector REGEXP "[[:<:]](1|2)[[:>:]]"
但是我想编写一个查询,其中扇区字段既不存在1
也不存在2
。输出应包含除1
和2
以外的其他所有扇区。
答案 0 :(得分:1)
感谢您的回答。
实际上,获得输出是如此容易。
我只是这样写查询
SELECT * FROM `tenders` WHERE sector NOT REGEXP "[[:<:]](1|2)[[:>:]]"
我得到了输出。
答案 1 :(得分:0)
根据您的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;
答案 2 :(得分:0)
答案 3 :(得分:0)
WHERE NOT FIND_IN_SET(1, sector)
AND NOT FIND_IN_SET(2, sector)
性能:对于2个项目,它可能与NOT REGEXP
大致相同。如果超过2,则速度可能会更慢。涉及CONCAT
的技术会更慢。