如果列的一部分中存在,则选择

ego6inou  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(431)

我有一个列表。我把数字储存在电脑里 VARCHAR(245) 列。数字一直在变化。例如,数字可以是42或5或其他。它也可以有多个数字,比如 42,5,20 等等。
我想选择其中一个数字是否存在而不是全部。例如,如果数字是 42,5,20 ,我想选择列中是否存在数字42,或者选择是否出现数字4或数字5。
我目前有一个查询,只有在只有一个号码时才会选择:

SELECT COUNT(*) FROM TABLE WHERE COLUMN1='42' AND COLUMN2='1';

当有多个数字时,查询无法找到它。

6ie5vjzr

6ie5vjzr1#

您应该使用like-wise运算符进行检查,并对精确值、中间值、末尾和开头的值进行多次检查。

SELECT COUNT(*) FROM TABLE WHERE (COLUMN1='42' OR COLUMN1 LIKE'%,42,%' OR COLUMN1  LIKE'%,42' OR COLUMN1 LIKE '42,%') AND COLUMN2='1';
r9f1avp5

r9f1avp52#

可以使用正则表达式来解决这个问题。如果您使用单词边界检查,您将避免部分匹配。
例如

mysql> select '42,5,20' REGEXP '[[:<:]]42[[:>:]]' AS 'Found';
+-------+
| Found |
+-------+
|     1 |
+-------+

但没有找到部分匹配

mysql> select '42,5,20' REGEXP '[[:<:]]2[[:>:]]' AS 'Found';
+-------+
| Found |
+-------+
|     0 |
+-------+

这将使你的问题

SELECT COUNT(*) 
FROM TABLE 
WHERE COLUMN1 REGEXP '[[:<:]]42[[:>:]]' 
AND COLUMN2 = '1';

相关问题