爲了拆分分隔字符串,我需要創建一個函數來返回一個表格並以逗號分隔的字符串作爲參數。創建一個函數將分隔字符串拆分爲表格
例如,看看這個輸入表:
使用功能,其結果必然是:
在這種情況下,分隔字符串Person列應該作爲參數。
在此先感謝。如果你想要做上面的函數從您的意見
,這個遠遠超過上述簡單:
爲了拆分分隔字符串,我需要創建一個函數來返回一個表格並以逗號分隔的字符串作爲參數。創建一個函數將分隔字符串拆分爲表格
例如,看看這個輸入表:
使用功能,其結果必然是:
在這種情況下,分隔字符串Person列應該作爲參數。
在此先感謝。如果你想要做上面的函數從您的意見
,這個遠遠超過上述簡單:
嘗試此查詢
//Which will work only when having 3 comma only
SELECT Id,SUBSTRING_INDEX(SUBSTRING_INDEX(`Person`, ',', 1), ',', -1) as Person
FROM `table`
UNION
select Id,SUBSTRING_INDEX(SUBSTRING_INDEX(`Person`, ',', 2), ',', -1) as Person
FROM `table`
UNION
select Id,SUBSTRING_INDEX(SUBSTRING_INDEX(`Person`, ',', 3), ',', -1) as Person
FROM `table`
order by Id ASC
試試這個
--Build Schema for Your Case
DECLARE @TAB TABLE (ID INT, NAME VARCHAR(1000))
INSERT INTO @TAB
SELECT 1,'Pravesh,Simon'
UNION ALL
SELECT 2,'Me,Myself,I'
--Used Recursive CTE to achieve Tabular view of Comma Separated Column
--Used While loop to take next row
--Used Table Variable @RESULT to store your Result Set
DECLARE @ID INT, @T VARCHAR(100), @SNO INT= 1, @MAX_SNO INT
DECLARE @RESULT TABLE (ID INT, NAME VARCHAR(1000))
SELECT @SNO=1, @MAX_SNO =MAX(ID) FROM @TAB
WHILE(@SNO<[email protected]_SNO)
BEGIN
SELECT @ID = ID, @T = NAME FROM @TAB WHERE [email protected]
SET @T [email protected]+','
;WITH MyCTE(Start,[End]) AS(
SELECT 1 AS Start,CHARINDEX(',',@T,1) AS [End]
UNION ALL
SELECT [End]+1 AS Start,CHARINDEX(',',@T,[End]+1)AS [End]
from MyCTE where [End]<LEN(@T)
)
INSERT INTO @RESULT
Select @SNO AS ID, SUBSTRING(@T,Start,[End]-Start) NAME from MyCTE;
SET @SNO+=1
END
--Getting Result Set
SELECT * FROM @RESULT
編輯循環。
CREATE FUNCTION [DBO].[FN_SPLIT_STR_TO_COL] (@T AS VARCHAR(4000))
RETURNS
@RESULT TABLE(VALUE VARCHAR(250))
AS
BEGIN
SET @T= @T+','
;WITH MYCTE(START,[END]) AS(
SELECT 1 AS START,CHARINDEX(',',@T,1) AS [END]
UNION ALL
SELECT [END]+1 AS START,CHARINDEX(',',@T,[END]+1)AS [END]
FROM MYCTE WHERE [END]<LEN(@T)
)
INSERT INTO @RESULT
SELECT SUBSTRING(@T,START,[END]-START) NAME FROM MYCTE;
RETURN
END
現在只需通過將列傳遞給它來調用每一行的函數。
隨着Cross Apply
SELECT ID,FN_RS.VALUE FROM @TAB
CROSS APPLY
(SELECT * FROM [DBO].[FN_SPLIT_STR_TO_COL] (NAME)) AS FN_RS
您的查詢是好的,但我正在尋找一個功能。你能幫我嗎? –
你可以檢查我的答案,將滿足你的條件... @Pravesh.Kan – Chanukya
我已經添加了代碼功能@Pravesh.Kan –
create function [dbo].[udf_splitstring] (@tokens varchar(max),
@delimiter varchar(5))
returns @split table (
token varchar(200) not null)
as
begin
declare @list xml
select @list = cast('<a>'
+ replace(@tokens, @delimiter, '</a><a>')
+ '</a>' as xml)
insert into @split
(token)
select ltrim(t.value('.', 'varchar(200)')) as data
from @list.nodes('/a') as x(t)
return
end
create table #dup
(id int, name varchar(100)
)
insert into #dup values
(1,'leela,venkatesh,don'),
(2,'john,smith,lewis')
select id,b.token from #dup
cross apply
(select token from udf_splitstring(name,','))b
http://stackoverflow.com/questions/2696884/split-value-from-one-field-to-two –
ü可以檢查我的答案... @ pravesh.kan – Chanukya
張貼問題後,你必須檢查答案,它是滿足你的要求,你必須接受.. @ pravesh.kan – Chanukya