2014-10-15 2 views
0

У меня есть стол, на который студент. Мне нужно имя студента, у которого нет 1 и у кого есть код субъекта 1.Like здесь не работает. Он дал имя работнику, у которого есть код предмета 11 или 12.Как получить значение, разделенное запятыми, в sql server 2000?

id name Isactive subjectcode 
1 Shilpa 1   1,2,3 
2 Manasi 1   11 
3 kamal 1   12,3 
4 Hans 0   1,2 
5 Rupali 1   1,11,12 
+1

Нормализация. Пожалуйста, сделайте это. –

+0

Мое решение ниже работает для вас? Он должен быть подходящим даже для большого количества записей. Однако, как отметил Митч, нормализация была бы идеальным способом. – Mez

+0

Рассмотрите возможность выбора ответа из списка ответов, которые вы получили ниже @Jui Test ... – Mez

ответ

0

Сначала создайте эту функцию

create function [dbo].[fnSplitString] 
(
    @string nvarchar(max) 
    ,@delimiter char(1) = ',' 
) 
returns @t table(string nvarchar(max)) 
as 
begin 
    declare @pos int 
    declare @piece varchar(500) 

    if right(rtrim(@string),1) <> @delimiter 
    set @string = @string + @delimiter 

    set @pos = patindex('%' + @delimiter + '%' , @string) 
    while @pos <> 0 
    begin 
    set @piece = left(@string, @pos - 1) 

    insert @t 
    select @piece 

    set @string = stuff(@string, 1, @pos,'') 
    set @pos = patindex('%' + @delimiter + '%' , @string) 
    end 
    return 
end 

Затем запустите этот

DECLARE @result TABLE (id Int,name Varchar(50),isactive Bit, subjectCode Varchar(200)) 

INSERT INTO @result 
SELECT 1 , 'Shilpa' , 1 ,  '1,2,3' 
INSERT INTO @result 
SELECT 2 , 'Manasi' , 1 ,  '11' 
INSERT INTO @result 
SELECT 3 , 'kamal', 1 ,  '12,3' 
INSERT INTO @result 
SELECT 4 , 'Hans' , 0  ,  '1,2' 
INSERT INTO @result 
SELECT 5 , 'Rupali' , 1 ,  '1,11,12' 

    SELECT * FROM @result WHERE isactive=1 AND 
(11 IN(SELECT * FROM [dbo].[fnSplitString](subjectCode,',')) 
OR 12 in 
(SELECT * FROM [dbo].[fnSplitString](subjectCode,','))) 
0

может вы пробовали ниже SQL-запрос

DECLARE @result TABLE (id Int,name Varchar(50),isactive Bit, subjectCode Varchar(200)) 

INSERT INTO @result 
SELECT 1 , 'Shilpa' , 1 ,  '1,2,3' 
INSERT INTO @result 
SELECT 2 , 'Manasi' , 1 ,  '11' 
INSERT INTO @result 
SELECT 3 , 'kamal', 1 ,  '12,3' 
INSERT INTO @result 
SELECT 4 , 'Hans' , 0  ,  '1,2' 
INSERT INTO @result 
SELECT 5 , 'Rupali' , 1 ,  '1,11,12' 

select * from @result where Isactive = 1 and (','+ subjectcode + ',') like '%,' + '1' + ',%' 
+0

Therae очень много записей –

0

, пожалуйста, используйте следующее условие вместо того, чтобы как

where CHARINDEX('1,',subjectcode) > 0 or CHARINDEX(',1',subjectcode) > 0 

Это будет работать.

Смежные вопросы