Published on

December 6, 2014

Исследование SQL Server: Разделение строк

Вам когда-нибудь приходилось разделять строку на несколько частей в SQL Server? В предыдущем блоге мы обсуждали метод разворота строки по словам. Однако наши читатели предложили некоторые альтернативные решения и модификации, которыми мы хотели бы поделиться с вами.

Один из наших уважаемых читателей, Санджай Монпара, предложил альтернативное решение в разделе комментариев блога. Мы приняли его предложение во внимание и создали более надежный сценарий на основе его идеи. Вот обновленный сценарий:

CREATE FUNCTION [dbo].[Split] (@string AS VARCHAR(8000), @splitAt AS VARCHAR(8000))
RETURNS @strings TABLE (ID INT, Strings VARCHAR(8000))
AS
BEGIN
    DECLARE @splitLen AS INT
    DECLARE @index AS INT
    DECLARE @id AS INT
    SET @id = 0
    SET @splitLen = LEN(@splitAt)
    SET @splitAt = '%' + @splitAt + '%'
    SET @index = PATINDEX(@splitAt, @string)
    
    WHILE(@index > 0)
    BEGIN
        SET @id = @id+1
        INSERT INTO @strings VALUES(@id,SUBSTRING(@string, 1, @index-1))
        SET @string = SUBSTRING(@string, @index + 1, LEN(@string))
        SET @index = PATINDEX(@splitAt, @string)
    END
    
    IF LEN(@string) > 0
    BEGIN
        SET @id = @id+1
        INSERT INTO @strings VALUES(@id, @string)
    END
    
    RETURN
END

Чтобы использовать эту функцию, вы можете следовать примеру ниже:

DECLARE @Input NVARCHAR(MAX)
SET @Input = 'This is Reverse String test'
DECLARE @Output NVARCHAR(MAX)
SET @Output = ''
SELECT @Output = strings + ' ' + @Output FROM dbo.split(@Input,' ')
ORDER BY ID
PRINT @Output

Этот сценарий вернет те же результаты, что и предыдущий блог. Мы хотели бы выразить нашу благодарность Санджаю за его ценный вклад.

В дополнение к решению Санджая, другой эксперт по имени Юрий Петров предложил модификацию сценария. Мы рассмотрим предложение Юрия в будущих блогах, так что оставайтесь на связи!

Спасибо за чтение и оставайтесь на связи для получения больше советов и трюков по SQL Server!

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.