获取SQL server名称中包含多个字符串的行
我正在使用SQL server 2014,我尝试获取名称中具有多个值的行,如:获取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”时,
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