1. ホーム
  2. sql-server

[解決済み] T-SQL。文字列の連結の反対 - 文字列を複数のレコードに分割する方法 [複製] (duplicate)

2022-06-05 21:01:47

質問

重複の可能性があります。

SQLで文字列を分割する

私が見たのは 文字列の連結に関連したいくつかの質問 に関連するいくつかの質問を見ました。 コマで区切られた文字列をデータの行に分割するという逆の問題には、どのようにアプローチするのでしょうか。

テーブルがあるとします。

userTypedTags(userID,commaSeparatedTags) 'one entry per user
tags(tagID,name)

そして、テーブルにデータを挿入したい

userTag(userID,tagID) 'multiple entries per user

インスピレーション データベースにないタグは? 質問

EDIT

回答ありがとうございます。本当はもっと多くのものが受け入れられるべきですが、1つしか選べません。 ソリューションであり、Cade Roux が提示した再帰を使用した解決策は、私にはかなりきれいに見えます。これは SQL Server 2005 以上で動作します。

SQL Server の以前のバージョンでは、解決策は miiesによって提供される を使用することができます。 テキストデータ型での作業には wcm回答 は役に立つでしょう。また、ありがとうございます。

どのように解決するのですか?

この問題を解決するには、さまざまな方法があります。 ここに記載されている この小さな宝石を含む。

CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(512))
RETURNS table
AS
RETURN (
    WITH Pieces(pn, start, stop) AS (
      SELECT 1, 1, CHARINDEX(@sep, @s)
      UNION ALL
      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
      FROM Pieces
      WHERE stop > 0
    )
    SELECT pn,
      SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
    FROM Pieces
  )