SQL就像文本中的两个通配符一样

问题描述 投票:0回答:3

有没有办法用两个单词(或更多)创建一个where语句,但它们与给出的单词的顺序不一样?

select 
    i.ITEM_NUMBER as Item,
    min(i.ITEM_DESCRIPTION) as Description,
    i.ORGANIZATION_CODE as Org,
    max(m.MANUFACTURER_NAME) as Manufacturer,
    max(m.MANUFACTURERS_PARTNUMBER) as Partnumber
from mis.XXEAM_INVENTORY_REPORT_WITH_LOCATORS_CONSIGNED_MATERIAL_AND_CATEGORIES_TBL i
left outer join 
    mis.XXEAM_MANUFACTURING_PART_NUMBERS_TBL m on i.ITEM_NUMBER = m.ITEM_NUMBER
where 
    i.ITEM_DESCRIPTION like '%ALLEN BRADLEY%PLC%' 
group by i.ORGANIZATION_CODE, i.ITEM_NUMBER

我想在上面的描述文本中搜索'%ALLEN BRADLEY%PLC%'或'%PLC%ALLEN BRADLEY%'。我想避免使用OR语句,因为数据集很大并且查询可能需要很长时间。

通配符可以超过两个,我只以这两个为例。在我看来,我会更喜欢为第一个单词获取数据集,然后从该数据集中获取第二个单词。也许唯一的方法是选择进入临时表。

sql sql-server wildcard sql-like
3个回答
5
投票

您可以为'ALLEN BRADLEY'和'PLC'做两个LIKE。它应该适合您想要的:

SELECT
    i.ITEM_NUMBER AS Item
   ,MIN(i.ITEM_DESCRIPTION) AS Description
   ,i.ORGANIZATION_CODE AS Org
   ,MAX(m.MANUFACTURER_NAME) AS Manufacturer
   ,MAX(m.MANUFACTURERS_PARTNUMBER) AS Partnumber
FROM mis.XXEAM_INVENTORY_REPORT_WITH_LOCATORS_CONSIGNED_MATERIAL_AND_CATEGORIES_TBL i
LEFT OUTER JOIN mis.XXEAM_MANUFACTURING_PART_NUMBERS_TBL m
    ON i.ITEM_NUMBER = m.ITEM_NUMBER
WHERE i.ITEM_DESCRIPTION LIKE '%ALLEN BRADLEY%' 
    and i.ITEM_DESCRIPTION LIKE '%PLC%' 
GROUP BY i.ORGANIZATION_CODE
        ,i.ITEM_NUMBER

0
投票

您可以使用:

PATINDEX ('((.*)[ALLEN BRADLEY](.*)[PLC](.*))|('(.*)[PLC](.*)[ALLEN BRADLEY](.*)'), 
i.ITEM_DESCRIPTION);

0
投票

根据您对性能,强大查询的需求,在列上创建全文索引是有意义的。通过使用索引,它将使您的查询受益,并且还可以在将新项目包含到条件时为您提供灵活性。如果查询很小,LIKE就足够了,但对于时间有问题的长表,请创建全文索引。

WHERE CONTAINS (i.ITEM_DESCRIPTION,"'ALLEN BRADLEY' OR 'PLC' OR 'any other item searched'");
© www.soinside.com 2019 - 2024. All rights reserved.