0

我正在使用现有数据库,该数据库在单个字段中列出了多个关联的 id 代码,用空格分隔。例如:“21 1894 774”

我正在尝试运行一个查询,在该查询中我提取包含该字段中某些数字的所有记录。例如,如果我搜索“21”,我想匹配包含“21 1894 744”、“21 4”、“1723 21 192”等的记录。

问题是它也匹配其他数字的部分。LIKE '%21%' 的查询匹配“221”、“215”、“1821”等。

我尝试了各种带空格的组合('% 21%'、'%21 %' 等),效果更好,但它们仍然匹配其他数字的一部分。我也不能只做被空格包围的数字,因为它们可能在初始位置。

如何查询此表以获取在空格分隔的字段中具有独立“21”的所有记录?我难住了!

谢谢!

4

3 回答 3

2

试试这个条件:

SELECT * FROM your_table WHERE the_text_field LIKE '21 %' OR the_text_field LIKE '% 21 %' OR the_text_field LIKE '% 21' OR the_text_field = '21'
于 2012-12-15T19:56:05.760 回答
1

MySQL 支持正则表达式。虽然最好拆分您的号码,但您可以搜索匹配项:

select * from your_table where the_text_field regexp '\b21\b';

于 2012-12-15T20:01:48.670 回答
1

如果你想要一个简单的查询,aurel.g 的答案是唯一的方法;但它会在每次查询时对整个数据库进行全面扫描,因此性能会很糟糕。

如果您必须经常这样做,最好修复数据库。添加一个只有两个字段的新表,一个用于单个数字,一个外键指向您找到该数字的原始记录。然后对整个数据运行一次扫描,为该文本字段上的每个数字创建一条记录。最后,在两列上添加一个复合索引。

之后,用一个数字查询所有记录将非常快速和准确。

于 2012-12-15T20:02:05.490 回答