【问题标题】:How to fetch comma separated value in sql server 2000?如何在 sql server 2000 中获取逗号分隔值?
【发布时间】:2014-10-15 08:21:17
【问题描述】:

我有一个名为 student 的表。我想要 isactive 为 1 且主题代码为 1 的学生的姓名。Like 在这里不起作用。它还给出了主题代码为 11 或 12 的员工的姓名。

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

【问题讨论】:

  • 标准化。请这样做。
  • 下面的解决方案对您有用吗?它甚至应该适用于大量记录。然而,正如 Mitch 提到的 - 标准化将是理想的方式。
  • 考虑从@Jui Test 下方收到的回复列表中选择一个答案...

标签: sql asp.net


【解决方案1】:

首先创建这个函数

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,',')))

【讨论】:

    【解决方案2】:

    你可以试试下面的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' + ',%'
    

    【讨论】:

    • 有很多记录
    【解决方案3】:

    请使用以下条件而不是喜欢

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

    这会起作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-08
      • 2017-08-04
      • 1970-01-01
      相关资源
      最近更新 更多