我有一列包含数据dump()
,我想检查dump()
是否可以作为单个单词在数据中使用。它可以是第一个,最后一个或介于两者之间的单词,例如Oil 76072 KTC Vegetable (Plastic Drum) 20ltr
以下我有的查询返回Veg
和KTC
的数据。
Veg
答案 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
);