1

SQL Serverでは、数値に基づいて文字列を分割する必要があります。そのための最良の方法は何でしょうか。たとえば、文字列の下で分割する必要があります

  1. このクエリを探しています。2.助けてくれませんか。3.本当にありがたいです。

私が探している結果は

  1. 私はこの答えを探しています。
  2. 助けてくれませんか。
  3. 本当にありがたいです。

ありがとう。

4

2 に答える 2

2

速くて汚いですが、それは機能します。必要に応じて最適化するための十分な余地

DECLARE @str AS VARCHAR(MAX);
SET @str = '1. I am looking for this query. 2. Can you please help. 3. I would really appreciate that.';

DECLARE @counter INT;
DECLARE @table TABLE ([Text] VARCHAR(MAX));
DECLARE @currentPattern VARCHAR(5);
DECLARE @nextPattern VARCHAR(5);

SET @counter = 1;
WHILE 1=1
BEGIN
    -- Set the current and next pattern to look for (ex. "1. ", "2. ", etc.)
    SET @currentPattern = '%' + CAST(@counter AS VARCHAR(4)) + '. %';
    SET @nextPattern = '%' + CAST(@counter + 1 AS VARCHAR(4)) + '. %';

    -- Check if the current pattern exists.
    IF (SELECT PATINDEX(@currentPattern, @str)) > 0
    BEGIN
        -- Check if the next pattern exists.
        IF (SELECT PATINDEX(@nextPattern, @str)) > 0
        BEGIN
            -- There is another pattern, so only get the text for the current one.
            INSERT INTO @table VALUES (SUBSTRING(@str, 1, PATINDEX(@nextPattern, @str) - 1));
            SET @str = SUBSTRING(@str, PATINDEX(@nextPattern, @str), LEN(@str) - PATINDEX(@nextPattern, @str) + 1);
        END
        ELSE
        BEGIN
            -- No other patterns exist, so just insert the variable text.
            INSERT INTO @table VALUES (@str);
        END
    END
    ELSE
    BEGIN
        -- Current pattern does not exist; break out of loop.
        BREAK;
    END

    SET @counter = @counter + 1;
END
SELECT * FROM @table;
于 2013-01-02T19:21:10.937 に答える
1

http://www.sqlservercentral.com/articles/Tally+Table/72993/にあるJeffModenの優れた「CSVSplitter」を使用することをお勧めします。Jeffは、SQL Serverコミュニティからのいくつかの良いフィードバックを利用して、この種の操作を実際に最適化しました。

于 2013-01-02T20:32:53.177 に答える