Вам когда-нибудь приходилось разделять строку на несколько частей в 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!