Concat和循环函数

时间:2014-02-27 18:28:19

标签: sql-server loops concat

我有这个问题: 对于以M和A开头的每个计划,我需要添加3个额外的字符并保留原始字符。此外,以T开头的计划需要保持不变: 例如:

M_VA_K15CVA
M_VA_M20CVA
M_VA_T234

应该是

M_VA_K15CVA
M_VA_K15CVA_V1
M_VA_K15CVA_V2
M_VA_K15CVA_V3
M_VA_M20CVA
M_VA_M20CVA_V1
M_VA_M20CVA_V2
M_VA_M20CVA_V3
M_VA_TNT10-VA

我应该使用什么提示来执行此文件?谢谢

1 个答案:

答案 0 :(得分:0)

通过JOIN到具有丢失JOIN条件的派生表,可以将列表扩展为更大的列表。这是满足您需求的代码,假设您在问题中表示“M”和“K”,而不是“M”和“A”,这似乎与您的示例不符。

DECLARE @Plans TABLE
(
    PlanID varchar(50)
);
INSERT INTO @Plans (PlanID) VALUES ('M_VA_K15CVA');
INSERT INTO @Plans (PlanID) VALUES ('M_VA_M20CVA');
INSERT INTO @Plans (PlanID) VALUES ('M_VA_T234');

SELECT
    CASE
        WHEN RowValue IS NULL OR RowValue = 0 THEN
            PlanID
        ELSE
            PlanID + '_V' + CONVERT(varchar,RowValue)
    END AS NewPlanID
FROM        @Plans
LEFT JOIN   (
                SELECT 0 AS RowValue
                UNION ALL SELECT 1
                UNION ALL SELECT 2
                UNION ALL SELECT 3
            ) AS RowExpander
ON          RIGHT(LEFT(PlanID,6),1) IN ('M','K');