在 sql Server 中,我需要根据数字拆分字符串。什么是最好的方法。例如,我需要在字符串下面拆分
- 我正在寻找这个查询。2. 你能帮忙吗?3. 我真的很感激。
我正在寻找的结果是
- 我正在寻找这个答案。
- 你能帮忙吗?
- 我真的很感激。
谢谢。
在 sql Server 中,我需要根据数字拆分字符串。什么是最好的方法。例如,我需要在字符串下面拆分
我正在寻找的结果是
谢谢。
又快又脏,但它有效。如果您愿意,有足够的优化空间
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;
我建议您使用 Jeff Moden 出色的“CSV Splitter”,它可以在http://www.sqlservercentral.com/articles/Tally+Table/72993/找到。Jeff 在 SQL Server 社区的一些良好反馈下确实优化了这种操作。