SQL 喜欢在文本中的任意位置使用两个通配符

SQL like with two wildcards anywhere in text

有没有办法使用 like 和两个(或更多)单词创建 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 语句,因为数据集很大,查询可能需要很长时间。

通配符可以有两个以上,我只是以这两个为例。在我看来,我更喜欢获取第一个单词的数据集,然后从该数据集中获取第二个单词。也许唯一的方法是 select 进入 temp-table.

您可以为 '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

您可以使用:

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

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

WHERE CONTAINS (i.ITEM_DESCRIPTION,"'ALLEN BRADLEY' OR 'PLC' OR 'any other item searched'");