嘿,我有一個這樣的表:返回分隔字符串的SQL Server功能
ID BitOne BitTwo BitThree
-- ------ ------ --------
99 NULL 1 NULL
99 1 NULL NULL
而且我需要返回字符串「BitTwo,BitOne」爲ID的用戶功能:99 - 這將是該函數的輸入參數。
這可能嗎?
嘿,我有一個這樣的表:返回分隔字符串的SQL Server功能
ID BitOne BitTwo BitThree
-- ------ ------ --------
99 NULL 1 NULL
99 1 NULL NULL
而且我需要返回字符串「BitTwo,BitOne」爲ID的用戶功能:99 - 這將是該函數的輸入參數。
這可能嗎?
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)
功能:
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,那麼結果你仍然會得到一個逗號。
而我怎麼會把這個函數,返回該字符串? – 2010-09-22 13:42:48
@ n0chi:查看更新。 – 2010-09-22 16:35:53
好創建的表有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
而我怎麼會把這個函數,返回該字符串? – 2010-09-22 13:43:46
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
在你的例子中,這些表中真的是兩行嗎?爲什麼你不能在表中有單行:99,1,1,NULL? – 2010-09-20 21:55:38
不幸的是,它沒有正常化。 – 2010-09-22 13:42:09