给定几个字符串
SET @Codes1 = 3,4
SET @Codes2 = 1
SET @Codes3 = --empty
表 -- TblCode
Id Code
1 A
2 B
3 C
4 D
如何通过连接将@Codes1、@Codes2、@Codes3
转换为表TblCode
,以便返回以下输出:
1. @Codes1 = CD
2. @Codes2 = A
3. @Codes3 = --empty
请注意,输出的连接没有逗号。
PS - 这是一个更大且复杂的数据集的小例子。请忽略这里任何错误的设计模式。
最佳答案
你可以试试这个。我仅添加了 @Codes1 的答案,但它也适用于 @Codes2 和 @Codes3。
DECLARE @TblCode TABLE (Id INT, Code VARCHAR(2))
INSERT INTO @TblCode
VALUES(1, 'A'),
(2,'B'),
(3,'C'),
(4,'D')
DECLARE @Codes1 VARCHAR(10) = '3,4'
DECLARE @Codes2 VARCHAR(10) = '1'
DECLARE @Codes3 VARCHAR(10) = NULL
DECLARE @CodesOut VARCHAR(10) = ''
;WITH CTE_1 AS (
SELECT CODE= @Codes1 + ','
)
, CTE_2 AS -- It silit text to rows
(
SELECT RIGHT(CTE_1.CODE, LEN(CTE_1.CODE) - CHARINDEX(',',CTE_1.CODE)) CODE , SUBSTRING(CTE_1.CODE, 0, CHARINDEX(',',CTE_1.CODE)) ID, CHARINDEX(',',CTE_1.CODE) AS CI
FROM CTE_1
UNION ALL
SELECT RIGHT(CTE_2.CODE, LEN(CTE_2.CODE) - CHARINDEX(',',CTE_2.CODE)) CODE , SUBSTRING(CTE_2.CODE, 0, CHARINDEX(',',CTE_2.CODE)) ID, CHARINDEX(',',CTE_2.CODE) AS CI
FROM CTE_2 WHERE LEN(CTE_2.CODE) > 0
)
SELECT @CodesOut = @CodesOut + C.Code FROM CTE_2 INNER JOIN @TblCode C ON CTE_2.ID = C.Id
SELECT @CodesOut
结果:
CD
关于SQL 字符串连接到表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687345/