首页 > 解决方案 > 文本中任意位置带有两个通配符的 SQL

问题描述

有没有办法使用 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 语句,因为数据集很大,查询可能需要很长时间。

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

标签: sqlsql-serverwildcardsql-like

解决方案


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

推荐阅读