SQL 字符串连接到表

标签 sql sql-server

给定几个字符串

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/

相关文章:

sql - 如何在 SQL 中保持滚动校验和?

c# - 将数据集传递给存储过程

sql-server - 如何将参数传递给将执行存储过程的 SQL 作业

sql - SQL 服务器管理工​​作室中的自动完成

java - 如果少于 3 个条目,则用零填充列表

sql - 从最大查询中选择列名

sql - 为什么窗口聚合函数的逻辑读取如此之高?

MySQL 查询返回当前日期的 -7 到 +7?

sql-server - 从外部系统生成的主键

sql - 根据sql server中的最高版本从sql结果中获取前1个结果