use*_*739 7 sql t-sql sql-server
我想征求你的意见,SQL服务器中的任何函数是否允许我对值列表执行部分匹配?
需要匹配的整个字符串将通过存储过程传递.
我想在编写自己的函数之前找到其他替代方法,用逗号分割字符串,然后在将数据返回给程序之前将所有结果联合起来.
例如,我将以下字符串传递给我的TSQL
苹果,橘子,梨
在我的WHERE条款中它应该匹配
select * from store where fruits like 'apple%'
select * from store where fruits like 'orange%'
select * from store where fruits like 'pear%'
Run Code Online (Sandbox Code Playgroud)
我可以在单个SQL语句中实现上述结果,而不是编写函数来打破每个字符串吗?
我表中的数据
apple red
apple green
orange sweet
orange sour
pear big
pear small
Run Code Online (Sandbox Code Playgroud)
所以,当我传入字符串"apple,pear"时,我需要返回
apple red
apple green
pear big
pear small
Run Code Online (Sandbox Code Playgroud)
aaf*_*fno 10
您可以创建临时表
'CREATE TABLE #Pattern (
SearchItems VARCHAR(20)
);'
Run Code Online (Sandbox Code Playgroud)
附注:确保检查临时表是否存在以避免错误.现在,您可以将搜索词插入临时表中
'INSERT
INTO #Pattern
VALUES
('% APPLE %'),
('% ORANGE %'),
('% BANANA %');'
Run Code Online (Sandbox Code Playgroud)
现在使用此临时表,使用INNER JOIN搜索您的表格
'SELECT *
FROM Store
INNER JOIN #Pattern
ON Store.Fruits LIKE SearchItems
'
Run Code Online (Sandbox Code Playgroud)
作为一个注释,临时表是我试图避免的主要是,但在这里它很方便,我使用这个解决方案的情况并没有要求性能.相反,它可以更容易地保持不断增长的searchItems.
希望这也适用于其他人.
它可以很简单:
SELECT
*
FROM
store
WHERE
fruits LIKE 'apple%'
OR fruits LIKE 'orange%'
OR fruits LIKE 'pear%'
Run Code Online (Sandbox Code Playgroud)
尝试一下,但性能不会很好
declare @parm varchar(200)
set @parm = ','+'apple,orange,pear'+','
select * from store where charindex(fruit,@parm) > 0
Run Code Online (Sandbox Code Playgroud)