【问题标题】:Split string via select statement通过 select 语句拆分字符串
【发布时间】:2017-08-31 23:06:55
【问题描述】:

相当简单的问题,但似乎不可能得到答案。

如果我有这个:

declare @Agent nvarchar(4000) = '2131235,334225';

有没有我可以编写的选择语句来拆分逗号所在的字符串,而不必编写函数?

类似:

SELECT SOME_SPLIT_LOGIC(@Agent)

我希望它返回:

Column
--------
2131235
334225

请注意我使用的是 MS-SQL 2012

【问题讨论】:

  • SQL Server 2016 中提供了一个内置函数(更多信息here),但在 Sql Server 2012 中恐怕您必须编写自己的拆分函数
  • 在 Google 上搜索“Jeff Moden DelimitedSplit8K”。

标签: string split sql-server-2012 ssms


【解决方案1】:
DECLARE @LeftPart TABLE
(Agent int
)

DECLARE @RightPart TABLE
(Agent1 int
)

declare @Agent nvarchar(4000) = '2131235,334225';

INSERT INTO @LeftPart
SELECT LEFT(@Agent,7)

INSERT INTO @RightPart
SELECT RIGHT(@Agent,6)

SELECT * INTO #Temp
FROM 
(
SELECT * FROM @LeftPart
UNION ALL
SELECT * FROM @RightPart
)A

SELECT * FROM #Temp

【讨论】:

    【解决方案2】:

    怎么样:

    DECLARE @Agent VARCHAR(4000) = '2131235,334225'
    DECLARE @Delimiter VARCHAR(1) = ','
    
    ;WITH CTE
    AS
    (
        SELECT 1 AS ID 
        UNION ALL
        SELECT ID + 1 FROM CTE
        WHERE ID < 4000
    )   
    
    SELECT
        SUBSTRING(@Agent, t.ID, CHARINDEX(@Delimiter, @Agent + @Delimiter, t.ID) - t.ID) AS Agent
    FROM CTE t
    WHERE t.ID <= DATALENGTH(@Agent)+1
        AND SUBSTRING(@Delimiter + @Agent, t.ID, 1) = @Delimiter
    OPTION (MAXRECURSION 4000)
    

    更多信息可以在这里找到:http://www.sqlservercentral.com/articles/Tally+Table/72993/

    【讨论】:

      猜你喜欢
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 2014-03-02
      • 2017-09-21
      • 1970-01-01
      相关资源
      最近更新 更多