Вопрос о скрипте для начинающих в SQL Server 2008: строки с разделителями и подстановочные выражения - PullRequest
1 голос
/ 06 мая 2011

Я пытаюсь взять строку данных из одного столбца и разделить ее на несколько различных столбцов.Вопрос в том, что мне нужно использовать пробел ('') в качестве разделителя, и я не уверен, как?Кроме того, мне нужно было бы включить операторы (я предполагаю) для разделения с подстрокой в ​​других областях.

Пример: имя учетной записи 445566 0010020056893010445478008 AFD 369 Я могу использовать пробел в качестве разделителя до точки001002 ... строка данных.Это должно быть сломано.Кроме того, если я использую пробел в качестве разделителя при попадании в область с несколькими пробелами, как избежать пустых столбцов?

1 Ответ

0 голосов
/ 06 мая 2011

Вот разделенная табличная функция:

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

Использование:

select
s.*
from dbo.Split('445566          0010020056893010445478008 AFD 369', ' ') as s
where s.StringValue != '' -- this condition will drop your extra spaces

Урожайность:

Ordinal    StringValue
1   445566
11  0010020056893010445478008
12  AFD
13  369

Который вы можете разбить дальше, если это необходимо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...