我正在使用SQL Ser 2008,並且只有一列數據的大表。數據是一個隨機字符串,一致性很低。例如:名稱帳戶445566 0010020056893010445478008 AFD 369.我一直在使用一個用戶提示的分支函數。它工作得很好,但函數將分割字符串分配到一列中。我需要一排單列。目前的結果是1col,其中包含值名稱,帳戶,445566,...,但我要查找的結果是col1名稱,col2帳戶,col3 445566,... 如果任何人都可以提供一些關於如何定製這個腳本或它的用法來獲得所需的結果,這將非常感激。SQL Server 2008 T-SQL UDF分割()裁剪
CREATE FUNCTION [dbo].[Split]
(
@String varchar(max)
,@Delimiter char
)
RETURNS @Results table
(
Ordinal int
,StringValue varchar(max)
)
as
begin
set @String = isnull(@String,'')
set @Delimiter = isnull(@Delimiter,'')
declare
@TempString varchar(max) = @String
,@Ordinal int = 0
,@CharIndex int = 0
set @CharIndex = charindex(@Delimiter, @TempString)
while @CharIndex != 0 begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,substring(@TempString, 0, @CharIndex)
)
set @TempString = substring(@TempString, @CharIndex + 1, len(@TempString) - @CharIndex)
set @CharIndex = charindex(@Delimiter, @TempString)
end
if @TempString != '' begin
set @Ordinal += 1
insert @Results values
(
@Ordinal
,@TempString
)
end
return
end
--The usage:
SELECT
*
FROM
mytable M
CROSS APPLY
[dbo].[Split] (M.TheColumn, ' ') S
Where rtrim(s.StringValue) != ''
順便說一句,該功能是從@antisanity借其使用在桌子上,從@gbn來了。多謝你們! – 2boolORNOT2bool 2011-05-11 18:32:01
你想達到什麼目的?這些數據是維護的還是重要的?輸出表格的寬度是否會變化或是靜態的? – canon 2011-05-11 19:00:55
我正在逆向工程舊的平面文件批處理。數據由包含120個字符的字符串組成。表格寬度將是一個靜態的列數。我的目標是將字符串拆分爲一列,而不僅僅是一列包含所有數據,但包含9或10列。這會影響每次10000行數據。再次感謝反對任何幫助! – 2boolORNOT2bool 2011-05-11 21:13:51