在Microsoft SQL Server中将文本拆分为行

时间:2018-08-20 13:55:30

标签: sql sql-server tsql

如何在Microsoft SQL Server中将文本拆分为行(或单词)?

我搜索并找到了新的STRING_SPLIT,但是尝试后发现它实际上并没有按照我的预期工作:

DECLARE @text NVARCHAR(100)
SET @text = 'This is line 1.' + CHAR(13) + 'This is line 2.'
SELECT STRING_SPLIT(@text, CHAR(13));
-- 'STRING_SPLIT' is not a recognized built-in function name.

也就是说,新的STRING_SPLIT是一个表而不是一个函数。

那么,如何在Microsoft SQL Server中将文本分成几行?

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式创建功能:

CREATE FUNCTION dbo.SPLIT(
          @delimited NVARCHAR(MAX),
          @delimiter NVARCHAR(100)
        ) RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
        AS
        BEGIN
          DECLARE @xml XML
          SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'

          INSERT INTO @t(val)
          SELECT  r.value('.','varchar(MAX)') as item
          FROM  @xml.nodes('/t') as records(r)
          RETURN
        END

然后像这样使用:

SELECT * FROM [dbo].[SPLIT] ('Lorem ipsum dolor sit amet.', ' ')

结果是:

1   Lorem
2   ipsum
3   dolor
4   sit
5   amet.

答案 1 :(得分:0)

您可以使用xml如下所示

DECLARE @xml as xml,@str as varchar(100),@delimiter as varchar(10)
SET @str='Lorem ipsum dolor sit amet.'
SET @delimiter =' '
SET @xml = cast(('<X>'+replace(@str,@delimiter ,'</X><X>')+'</X>') as xml)
SELECT N.value('.', 'varchar(10)') as value FROM @xml.nodes('X') as T(N)