2009-07-14 49 views
0

我有一个要求。SQL SERVER 2005中的多项搜索选项

鉴于说Test1,Test2,我必须执行一个类似的操作。

喜欢的东西

select * from tblname where column_name like('Test1%','Test2%'); 

即这些字符串是逗号分隔

如何解决这个问题?

这是SQL Server提前2005年

感谢

+0

是正确的,你可以这样做 – KuldipMCA 2009-07-14 11:37:57

回答

1

sql server 2005,试试这个

--Lookup Table 
DECLARE @Values TABLE(
     Column_Name VARCHAR(MAX) 
) 

INSERT INTO @Values (Column_Name) SELECT 'A' 
INSERT INTO @Values (Column_Name) SELECT 'B' 
INSERT INTO @Values (Column_Name) SELECT 'ATADA' 
INSERT INTO @Values (Column_Name) SELECT 'TADAA' 
INSERT INTO @Values (Column_Name) SELECT 'Test123A' 
INSERT INTO @Values (Column_Name) SELECT '1Test123A' 

--Lookup string and delim 
DECLARE @LookupString VARCHAR(MAX) 
DECLARE @Delim VARCHAR(1) 

SET @LookupString = 'Test1,Test2,TADA' 
SET @Delim = ','; 

--CREATE A LOOKUP TABLE FOR SPLIT STRINGS 
WITH substrings (Val, Remainder) AS(
    SELECT CASE WHEN CHARINDEX(@Delim,@LookupString) = 0 THEN @LookupString ELSE LEFT(@LookupString,CHARINDEX(@Delim,@LookupString)-1) END, 
      CASE WHEN CHARINDEX(@Delim,@LookupString) = 0 THEN '' ELSE RIGHT(@LookupString,LEN(@LookupString) - CHARINDEX(@Delim,@LookupString)) END 
    UNION ALL 
    SELECT CASE WHEN CHARINDEX(@Delim,Remainder) = 0 THEN Remainder ELSE LEFT(Remainder,CHARINDEX(@Delim,Remainder)-1) END, 
      CASE WHEN CHARINDEX(@Delim,Remainder) = 0 THEN '' ELSE RIGHT(Remainder,LEN(Remainder) - CHARINDEX(@Delim,Remainder)) END 
    FROM substrings 
    WHERE CHARINDEX(@Delim,Remainder) >= 0 AND Val != '' AND Remainder != '' 
) 
SELECT v.Column_Name, 
     substrings.Val 
FROM @Values v INNER JOIN 
     substrings ON v.Column_Name LIKE substrings.Val + '%' 
3

您将需要创建一个TSQL语句是这样的:

SELECT 
    * 
FROM 
    tblname 
WHERE 
    column_name like 'Test1%' 
    OR 
    column_name like 'Test2%' 

你需要一个或者每个案件

2
declare @v varchar(50) 
    declare @sql varchar(1000) 
    declare @c int 

    set @v = ltrim(rtrim(' An Gu an')) -- this is your search creteria 
    set @sql = 'select * from tblname where ' 
    set @c = charindex(' ', @v) 

    while @c > 0 
     begin 
      set @sql = @sql + 'column_name ' + ' like ''%' + 
         left(@v,@c-1) +'%'' OR '; 
      set @v = right(@v, len(@v)[email protected])  
      set @c = charindex(' ', @v) 
     end 
    set @sql = @sql + ' column_name like ''%'[email protected] +'%''' 

     --sql now contains 
     --select * from tblname where 
     -- column_name like '%An%' OR 
     -- column_name like '%Gu%' OR 
     -- column_name like '%an%' 

    exec(@sql) 
0

示例代码:

declare @val varchar(100) set @val = '30,31,34,35,24,16' 

PRINT REPLACE((','[email protected]),',','%'' OR MAQL LIKE ''%') + '%'''