我有一个带有列的表。我将号码存储在VARCHAR(245)
列中。数字一直在变化。例如,数字可以是42或5或其他。它也可以有多个数字,例如42,5,20
等等。
我想选择其中一个数字是否存在而不是全部。例如,如果数字为42,5,20
,我想选择列中是否存在数字42,或者选择数字4或数字5是否出现。
我目前有一个查询,只有在只有一个数字时才会选择:
SELECT COUNT(*) FROM TABLE WHERE COLUMN1='42' AND COLUMN2='1';
当有多个号码时,查询无法找到它。
答案 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';