2010-09-20 30 views
2

嘿,我有一個這樣的表:返回分隔字符串的SQL Server功能

ID BitOne BitTwo BitThree 
-- ------ ------ -------- 
99 NULL 1  NULL 
99 1  NULL NULL 

而且我需要返回字符串「BitTwo,BitOne」爲ID的用戶功能:99 - 這將是該函數的輸入參數。

這可能嗎?

+0

在你的例子中,這些表中真的是兩行嗎?爲什麼你不能在表中有單行:99,1,1,NULL? – 2010-09-20 21:55:38

+0

不幸的是,它沒有正常化。 – 2010-09-22 13:42:09

回答

2
Use [SOFDB1] 

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- exec SELECT dbo.GetString(7) 
ALTER FUNCTION dbo.GetString 
( 
    @ID BIGINT 
) 
RETURNS NVARCHAR(MAX) 
AS 
BEGIN 
    DECLARE @RESULT_STRING nvarchar(max); 
    SELECT 
     @RESULT_STRING = CONVERT(nvarchar,(CASE 
      WHEN t.BitOne IS NOT NULL THEN CONVERT(varchar,t.BitOne) 
      ELSE 'NULL' 
      END) + ',' + 
     (CASE 
      WHEN t.BitTwo IS NOT NULL THEN CONVERT(varchar,t.BitTwo) 
      ELSE 'NULL' 
      END) + ',' + 
     (CASE 
      WHEN t.BitThree IS NOT NULL THEN CONVERT(varchar, t.BitThree) 
      ELSE 'NULL' 
      END)) FROM TestTable1 t WHERE t.ID = @ID 

    RETURN @RESULT_STRING 
END 

,並呼籲

在SP

或東西來獲取函數的值>>>>選擇dbo.GetString(theIDtoPass)

2

功能:

CREATE FUNCTION getList (
@id_parameter INT 
) 
RETURNS VARCHAR(MAX) 
AS 
BEGIN 

    DECLARE @result VARCHAR(MAX) 

    SELECT @result = MAX(CASE WHEN t.bitone = 1 THEN 'bitone' ELSE '' END) +','+ 
        MAX(CASE WHEN t.bittwo = 1 THEN 'bittwo' ELSE '' END) 
    FROM your_table t 
    WHERE t.id = @id_parameter 
GROUP BY t.id 

RETURN @result 

END 
GO 

用途:

SELECT MAX(CASE WHEN t.bitone = 1 THEN 'bitone' ELSE '' END) +','+ 
     MAX(CASE WHEN t.bittwo = 1 THEN 'bittwo' ELSE '' END) 
    FROM TABLE t 
    WHERE t.id = @id_parameter 
GROUP BY t.id 

但它會幫知道你希望如何處理當值id不具備bitone,bittwo等值。如果兩者都是NULL或不是1,那麼結果你仍然會得到一個逗號。

+0

而我怎麼會把這個函數,返回該字符串? – 2010-09-22 13:42:48

+0

@ n0chi:查看更新。 – 2010-09-22 16:35:53

0

好創建的表有4個字段 ID - BigInt有

BitOne - BigInt有

BitTwo - BigInt有

BitThree - BigInt有

樣本數據

1 1 NULL 1 >>>輸出'1,NULL,1'

2 1 NULL NULL >>>輸出 '1,NULL,NULL'

3 NULL NULL 1 >>>輸出 'NULL,1,NULL'

4 NULL 1 1 >>>輸出「NULL, 1,1'

5 1 1 1 >>>輸出 '1,1,1'

QUERY >>>>>

SELECT 
    CONVERT(nvarchar,(CASE 
     WHEN t.BitOne IS NOT NULL THEN CONVERT(varchar,t.BitOne) 
     ELSE 'NULL' 
     END) + ',' + 
    (CASE 
     WHEN t.BitTwo IS NOT NULL THEN CONVERT(varchar,t.BitTwo) 
     ELSE 'NULL' 
     END) + ',' + 
    (CASE 
     WHEN t.BitThree IS NOT NULL THEN CONVERT(varchar, t.BitThree) 
     ELSE 'NULL' 
     END)) AS RESULTSTRING from TestTable1 t WHERE t.ID = @ID 

可以替換 '' 與 'NULL' 到使空字符串在那裏或可以放任何字符串

希望幫助

問候,J'Sinh

+0

而我怎麼會把這個函數,返回該字符串? – 2010-09-22 13:43:46

0
Please try this solution. 

DECLARE @Colors VARCHAR(MAX) 
SELECT @Colors = ISNULL(@Colors + ', ', '') + cmnColor.Name 
FROM [dbo].[CMN_Sel_Colors] as cmnColor 
INNER JOIN [dbo].[Sel_ItemColor] AS itemcolor ON itemcolor.ColorID = cmnColor.ColorID 
WHERE itemcolor.ItemID = @ItemID 

RETURN @Colors