我正在使用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