选择是否存在于列的一部分中

时间:2018-04-15 19:14:20

标签: mysql identity-column

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

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

我目前有一个查询,只有在只有一个数字时才会选择:

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

当有多个号码时,查询无法找到它。

2 个答案:

答案 0 :(得分:1)

您应该使用类似操作符进行检查,并对多个检查确定一个确切的值,两者之间的值,结束时和开始时的值。

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

答案 1 :(得分:0)

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

e.g。

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