簡體   English   中英

SQL 服務器中的 SUBSTRING_INDEX 等效項

[英]SUBSTRING_INDEX equivalent in SQL Server

桌子:

id | name    
1  | a,b,c    
2  | b

Output

id | name    
1  | a    
1  | b    
1  | c    
2  | b

我在網上找到了這個查詢,它在 mySql Phpmyadmin 查詢編輯器中運行良好。

SELECT
  tablename.id, SUBSTRING_INDEX(SUBSTRING_INDEX (tablename.name, ',', numbers.n), ',', - 1) NAME
FROM  (SELECT 1 n UNION ALL
  SELECT 2 UNION ALL
  SELECT 3 UNION ALL
  SELECT 4) numbers
INNER JOIN tablename
    ON CHAR_LENGTH (tablename.name) - CHAR_LENGTH (REPLACE (tablename.name, ',', '')) >= numbers.n - 1
ORDER BY id, n

但是在 SQL 服務器中,它拋出

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]'SUBSTRING_INDEX' is not a recognized built-in function name.
[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near 'numbers'.

編輯:此查詢用於表格開發,其中 TSQL 未按預期工作

在此處輸入圖像描述

在 SQL Server 2016 及更高版本上,我們可以在此處使用STRING_SPLIT

SELECT id, value AS name  
FROM yourTable
CROSS APPLY STRING_SPLIT(name, ',')
ORDER BY id, value;

嘗試這個:

DECLARE @DataSource TABLE
(
    [ID] INT
   ,[name] VARCHAR(24)
);

INSERT INTO @DataSource ([ID], [Name])
VALUES (1, 'a,b,c')
      ,(2, 'b');

WITH DataSource ([ID], [nameXML]) AS
(
    SELECT [ID]
          ,CAST('<a>' + REPLACE([name], ',', '</a><a>')+ '</a>' AS XML)
    FROM @DataSource
)

SELECT [ID]
      ,T.c.value('.', 'VARCHAR(100)')
FROM DataSource DS
CROSS APPLY [nameXML].nodes('./a') T(c);

您可以使用遞歸 CTE,如下所示

CREATE TABLE TBL(
  Id INT,
  String VARCHAR(45)
);

INSERT TBL VALUES
(1, 'a,b,c'),
(2, 'b');

WITH CTE(Id, Chr, String) AS
(
  SELECT Id,
         CAST(LEFT(String, CHARINDEX(',', String + ',') - 1) AS VARCHAR(20)),
         STUFF(String, 1, CHARINDEX(',', String + ','), '')
  FROM TBL
  UNION ALL
  SELECT Id,
         CAST(LEFT(String, CHARINDEX(',', String + ',') - 1) AS VARCHAR(20)),
         STUFF(String, 1, CHARINDEX(',', String + ','), '')
  FROM CTE
  WHERE String > ''
)
SELECT Id,
       Chr
FROM CTE
ORDER BY Id;

在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM