Опция множественного поиска в SQL SERVER 2005 - PullRequest
0 голосов
/ 14 июля 2009

У меня есть требование.

Учитывая, скажем, Test1, Test2, я должен выполнить подобную операцию.

Что-то вроде

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

т.е. эти строки разделяются запятыми

Как мне решить эту проблему?

Это в SQL SERVER 2005.

Заранее спасибо

Ответы [ 4 ]

3 голосов
/ 14 июля 2009

Вам нужно будет создать оператор TSQL следующим образом:

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

Вам нужен ИЛИ для каждого случая

2 голосов
/ 14 июля 2009
    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)-@c)      
            set @c = charindex(' ', @v)
        end
    set @sql = @sql + ' column_name like ''%'+@v +'%'''

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

    exec( @sql)
1 голос
/ 14 июля 2009

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 + '%'
0 голосов
/ 06 августа 2013

Пример кода:

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

PRINT REPLACE((','+@val),',','%'' OR MAQL LIKE ''%') + '%'''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...