Select 如果存在于列的一部分

Select if exists in part of a column

我有一个带列的 table。我将数字存储在 VARCHAR(245) 列中。数字一直在变化。例如,数字可以是 42 或 5 或其他。它也可以有多个数字,如42,5,20等。

我想 select 如果其中一个号码存在而不是全部。例如,如果数字是 42,5,20,我想 select 如果列中存在数字 42,或者 select 如果数字 4 或数字 5 出现。

我目前有一个查询 select 仅当只有一个数字时:

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

当有多个号码时,查询找不到。

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

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

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

例如

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';