2013-07-18 36 views
1

我必須用逗號分隔的獲取ID值,然後從另一個表

GoalTag:All Tags,TaskTag:All Tags,GoalId:All,TaskId:All,MaxGoal:5,MaxTask:5 

正如你可以看到我有以逗號分隔的6個值一列值中獲得價值,所以當我做分裂第一個值將是

GoalTag:All Tags 

如何我這樣做(讓用英文逗號分隔值是)通過調用表值函數

Select * from dbo.CustomSplit((SELECT FilterNames FROM TblUserFilterView where UserId = 325 AND Entity = 'Dashboard'),',') 

dbo.CustomSplit的定義看起來像

ALTER FUNCTION [dbo].[CustomSplit](@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (Items varchar(8000))  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(@slice)  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return  
end 

現在我需要做的是,我需要的值之後,":"即「所有標籤」,它可能會有一些ID爲其他一些記錄,讓我們說,這可能是「142」。我需要得到這個Id,然後從表中獲取相應的值。

我該怎麼做?

回答

1

試試這個:

SELECT Substring(s.items, 1 + Charindex (':', s.items), 
     Len(s.items) - Charindex (':', 
     s.items)) 
FROM (SELECT * 
     FROM dbo.Customsplit((SELECT filternames 
          FROM tbluserfilterview 
          WHERE userid = 325 
            AND entity = 'Dashboard'), ',')) AS s 

您可以創建另一個功能:

CREATE FUNCTION [dbo].[Customsplit2](@string VARCHAR(8000), 
            @Delimiter CHAR(1)) 
returns VARCHAR(4000) 
AS 
    BEGIN 
     DECLARE @result NVARCHAR(4000) 
     SELECT @result = Substring(@string, 1 + Charindex (@Delimiter, @string), 
             Len(@string) - Charindex (@Delimiter, 
                 @string) 
         ) 
     RETURN @result 
    END 

而且使用它像:

SELECT [dbo].Customsplit2(s.items, ':') AS Tag 
FROM (SELECT * 
     FROM dbo.Customsplit((SELECT filternames 
           FROM tbluserfilterview 
           WHERE userid = 325 
             AND entity = 'Dashboard'), ',')) AS s 
+0

是的,它正確地賦予價值,而是作爲一個獨立連續記錄;除此之外,我需要他們一個一個,並從表中獲取相應的值。 – nrsharma

+0

_(...)從table_中獲取相應的值,請在獲取這些id後,通過解釋過程中的下一步來編輯您的問題。 –

+0

謝謝;它爲我工作。我會管理下一步的事情。 – nrsharma

相關問題