获取SQL server名称中包含多个字符串的行

获取SQL server名称中包含多个字符串的行,sql,sql-server,Sql,Sql Server,我正在使用SQL server 2014,我尝试获取名称中具有多个值的行,如: declare @value ='m n' 所以return的值在任何位置都应该有'm'和'n' 我试着用 Select * from Table where contains(name,N'"*m*" and "*n*"') 但值仅在以“m”和“n”开头时返回 我也试过: select * from Table where name like '%m%n%' 仅当名称包含“m”和“n”而不是“n”和“m”时,

我正在使用SQL server 2014,我尝试获取名称中具有多个值的行,如:

declare @value ='m n'
所以return的值在任何位置都应该有'm'和'n' 我试着用

Select * from Table where contains(name,N'"*m*" and "*n*"')
但值仅在以“m”和“n”开头时返回

我也试过:

select * from Table where name like '%m%n%'
仅当名称包含“m”和“n”而不是“n”和“m”时,该值才会返回


注意:我从参数中获取值,所以我不知道有多少个字符或位置,所以我使用@value上的replace来获取所需的值。

您必须像这样分离您的条件


从表中选择*,其中名称为“%m%”,名称为“%n%”,因为您要使用该变量

然后最好把字母或单词分开

有了这个功能就好了。 但是有很多方法可以分割字符串

下面的示例使用WHILE循环来实现


dbfiddle

这是否回答了您的问题?不幸地不,因为我得到的是多个字符,我不知道有多少个字符,所以只能使用两个值mn,或者可以有更多的mno?可以是一个或两个或更多您应该在SQL server中探索全文搜索,这将有助于您解决这一问题。我从参数中获取值,所以我不知道有多少个字符或位置,所以我使用@value上的替换来获取我想要的会起作用,但我不知道有多少值可能是一个、两个或三个
CREATE TABLE [Table]
( id INT IDENTITY(101,1) PRIMARY KEY,
  name NVARCHAR(100) NOT NULL
);
GO
INSERT INTO [Table] (name) VALUES
('a munchkin'),
('never ever sever mah lever'),
('saintess'),
('them mammaries');
GO
4 rows affected
DECLARE @value NVARCHAR(1000);
SET @value ='  m  n  ';

DECLARE @values TABLE (
 value NVARCHAR(42)
);
DECLARE @words NVARCHAR(1000);
DECLARE @word NVARCHAR(42);

SET @words = RTRIM(LTRIM(@value))+' ';

WHILE CHARINDEX(' ', @words) > 0
BEGIN
 SET @word = SUBSTRING(@words,0,CHARINDEX(' ',@words))
 SET @words = LTRIM(SUBSTRING(@words,CHARINDEX(' ',@words)+1,LEN(@words)))
 IF @word != '' INSERT INTO @values (value) VALUES (@word);
END;

DECLARE @TotalValues INT;
SET @TotalValues = (select count(distinct value) from @values);

--
-- use the table variable to query the table
--
SELECT * 
FROM [Table] t
WHERE EXISTS
(
   SELECT 1
   FROM @values v
   WHERE t.name LIKE '%'+v.value+'%'
   HAVING COUNT(DISTINCT v.value) = @TotalValues
);

GO
id | name --: | :------------------------- 101 | a munchkin 102 | never ever sever mah lever