使用空格SQL模式匹配查找单词

时间:2018-12-06 21:35:04

标签: sql sql-server tsql pattern-matching

我有一列包含数据dump()

,我想检查dump()是否可以作为单个单词在数据中使用。它可以是第一个,最后一个或介于两者之间的单词,例如Oil 76072 KTC Vegetable (Plastic Drum) 20ltr

以下我有的查询返回VegKTC的数据。

Veg

4 个答案:

答案 0 :(得分:1)

  

我想检查一下素食主义者是否可以在单个单词上使用蔬菜

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 '

OR

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

答案 1 :(得分:0)

如果我理解正确,那么您想要:

WHERE ' ' + searchbox] + ' ' like '% ' + ' + trim(ltrim('veg')) + ' %'

答案 2 :(得分:0)

您需要使用LIKE运算符检查3种情况的开头,结尾或结尾:

SELECT
    Item,
    Description,
    SearchBox,
    Ranking,
    'Part Word Match' as SearchType 
FROM
    [HypEcommerce].[dbo].[ProductSearch]
WHERE (
    [searchbox] like 'veg %' or 
    [searchbox] like '% veg %' or 
    [searchbox] like '% veg'    
)

我猜可能还会有类似(veg ...)这样的情况。
或在还有LOWER([searchbox])Veg

的情况下使用VEG

答案 3 :(得分:0)

不幸的是,使用正则表达式SQL Server does not support regexps可以轻松实现。

因此,必须使用LIKE(3分支测试)。我刚刚更新了您的查询,以避免重复出现rtrim/ltrim麻烦:

SELECT
    Item,
    Description,
    SearchBox,
    Ranking,
    'Part Word Match' as SearchType 
FROM
    [HypEcommerce].[dbo].[ProductSearch]
WHERE (
       veg like        [searchbox] + ' %' -- match at beginning
    OR veg like '% ' + [searchbox] + ' %' -- match in the middle
    OR veg like '% ' + [searchbox]        -- match at end 

);