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';
我有一个带列的 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';