首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

SQL Server 存儲過程:三字符串分割並按位組裝為新字符串

     編輯:程式設計綜合問答

需求:三個逗號分隔字符串 A="440,441,442,443"、B="a,b,c,d"、C="1,2,3,4",一一對應組裝為 440,a,1;441,b,2;442,c,3;443,d,4;。使用 CHARINDEX + STUFF 循環分割拼接。

存儲過程完整代碼

CREATE PROCEDURE dbo.Pro_STR
    @A NVARCHAR(200) = '440,441,442,443',
    @B NVARCHAR(200) = 'a,b,c,d',
    @C NVARCHAR(200) = '1,2,3,4'
AS
BEGIN
    DECLARE @result NVARCHAR(4000) = '';
    SET @A += ','; SET @B += ','; SET @C += ',';  -- 統一加尾部逗號簡化邏輯
    
    WHILE CHARINDEX(',', @A) > 0
    BEGIN
        SET @result += LEFT(@A, CHARINDEX(',', @A)-1) + ',' 
                     + LEFT(@B, CHARINDEX(',', @B)-1) + ',' 
                     + LEFT(@C, CHARINDEX(',', @C)-1) + ';';
        
        SET @A = STUFF(@A, 1, CHARINDEX(',', @A), '');
        SET @B = STUFF(@B, 1, CHARINDEX(',', @B), '');
        SET @C = STUFF(@C, 1, CHARINDEX(',', @C), '');
    END
    
    SELECT @result AS CombinedResult;  -- 直接返回結果集
END

關鍵函數說明

  • CHARINDEX(',', str):查找逗號位置(1-based)
  • LEFT(str, len):取左側子串
  • STUFF(str, start, len, replacement):刪除指定長度並插入新串(此處用空串實現截取)

現代替代方案 (SQL 2016+)

SELECT STRING_AGG(a.value + ',' + b.value + ',' + c.value, ';') WITHIN GROUP (ORDER BY a.ordinal)
FROM STRING_SPLIT(@A, ',') a
JOIN STRING_SPLIT(@B, ',') b ON a.ordinal = b.ordinal
JOIN STRING_SPLIT(@C, ',') c ON a.ordinal = c.ordinal;

STRING_SPLIT 返回 value 與 ordinal(順序號),配合 STRING_AGG 可無循環完成。注意 STRING_SPLIT 不保證順序,需 Join ordinal 對齊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved