我正在使用现有数据库,该数据库在单个字段中列出了多个关联的ID代码,用空格分隔。例如:“21 1894 774”
我正在尝试运行一个查询,其中我在此字段中提取包含特定数字的所有记录。例如,如果我搜索“21”,我想匹配包含“21 1894 744”,“21 4”,“1723 21 192”等的记录。
问题是它也匹配其他数字的部分。对LIKE'%21%'的查询匹配“221”,“215”,“1821”等。
我尝试了各种空格组合('%21%','%21%'等)并且它更好,但它们仍然匹配其他数字的部分。我也不能只做空格包围的数字,因为它们可能处于初始位置。
如何查询此表以获取在空格分隔字段中具有独立“21”的所有记录?我很难过!
谢谢!
答案 0 :(得分: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'
答案 1 :(得分:1)
MySQL支持正则表达式。虽然分割你的数字更好,你可以搜索匹配:
从your_table中选择*,其中the_text_field regexp'\ b21 \ b';
答案 2 :(得分:1)
如果您想要一个简单的查询,the answer from aurel.g是唯一的方法;但它会在每个查询上对整个数据库进行全面扫描,因此性能会非常糟糕。
如果必须自行执行此操作,请更好地修复数据库。添加一个只有两个字段的新表,一个用于单个数字,另一个外键指向您找到该数字的原始记录。然后对整个数据进行单次扫描,为该文本字段上的每个数字创建一条记录。最后,在两列上添加复合索引。
之后,使用单个数字查询所有记录将非常快速和准确。