MySql列与3个连续数字匹配

时间:2014-01-27 18:02:00

标签: mysql sql regex

我有两张桌子,比方说AllComputers和MfgComputers。 Allcomputers中有趣的列是Brand_Name,Model_Name和Model_Number。 Mfgcomputers中有趣的专栏是Product_Name。

我可以使用以下查询来显示Brand_Name为HP的所有行以及与Product_Name完全匹配的Model_Name或Model_Number。

select * from AllComputers,MfgComputers where AllComputers.Brand_Name='HP' AND AllComputers.Model_Number=MfgComputers.Product_Name OR AllComputers.Model_Name=MfgComputers.Product_Name;

我想匹配Brand_Name是HP的位置但使用LIKE或REGEX来匹配所有行,只有当两个匹配中包含至少三个连续数字时,Model_Number和Model_Name才匹配Product_Name。

因此,如果我将Model_Name作为HP Pavilion 500多功能一体机,将Product_Name作为HP 500多功能一体机,我只想返回两者都有500的匹配,而不是所有包含“全部”的所有匹配在一台电脑上。

我尝试使用LIKE来解析上述查询中的最后两个=符号,但仍然只匹配完全匹配,因为我不知道如何为整列添加外卡。

我知道如果只匹配一个特定的模型,我可以使用通配符,例如:     从AllComputers中选择*,其中Model_Number LIKE'%500%'; 要么     从AllComputers中选择*,其中Model_Number REGEXP'500';

但是,我想知道是否有可能在所有具有至少3个连续数字的模型匹配的列之间执行此操作。

2 个答案:

答案 0 :(得分:0)

MySQL中的REGEXP具有数字通配符,因此请尝试REGEXP '.*[0-9][0-9][0-9].*'

。*相当于LIKE'%',因此实际上将两个%s之间的3个数字数字夹在中间。

答案 1 :(得分:0)

这将带回至少有三个连续数字的模型。

where Model_Number REGEXP '[0-9]{3}'

根据您的评论更新:

select * from 
  AllComputers, MfgComputers
where
  AllComputers.Brand_Name='HP' AND
  AllComputers.Model_Number REGEXP '[0-9]{3}' -- missing AND/OR here
  MfgComputers.Product_Name OR  -- make sure you are grouping using () for this OR
  AllComputers.Model_Name REGEXP '[0-9]{3}' -- missing AND/OR here
  MfgComputers.Product_Name;