首页 > 解决方案 > 使用空格 SQL 模式匹配查找单词

问题描述

我有一列包含数据Oil 76072 KTC Vegetable (Plastic Drum) 20ltr

我想检查是否Veg可以作为数据中的一个单词使用。它可以是第一个,最后一个或介于两者之间的单词KTC

我在下面的查询返回数据VegKTC两者。

SELECT
    Item,
    Description,
    SearchBox,
    Ranking,
    'Part Word Match' as SearchType 
FROM
    [HypEcommerce].[dbo].[ProductSearch]
WHERE (
    [searchbox] like '%_' + trim(ltrim('veg')) +'_%'
    OR [searchbox] like '%_'+ rtrim(ltrim('veg'))+ ''
    OR [searchbox] like ''+ rtrim(ltrim('veg')) +'_%'    
)

标签: sqlsql-servertsqlpattern-matching

解决方案


我想检查 Veg 是否可以作为 dat 中的一个单词使用

CREATE TABLE T(
  Value VARCHAR(45)
);

INSERT INTO T VALUES
('FooVeg Bar'), --not single word
('Foo Veg Bar'), --in the middle
('Veg Foo Bar'), --in the begining
('Bar Foo Veg'); --in the end

由于它可以在任何地方,因此您可以使用

SELECT *
FROM T
WHERE LOWER(Value) LIKE '% veg %'
      OR
      RIGHT(LOWER(Value), 4) = ' veg'
      OR
      LEFT(LOWER(Value), 4) = 'veg '

或者

SELECT *
FROM T 
WHERE Value LIKE '% veg %'
      OR
      Value LIKE '% veg'
      OR
      Value LIKE 'veg %'
COLLATE Latin1_General_CI_AI

推荐阅读