Sql 如何替换单个select语句中的多个字符串?
我试图替换表中的字符串,但无法得到所需的内容。下面是我尝试过的替换strigns的示例代码 问题:我需要用精确匹配的值替换字符串“CV7+CV8” 例如:如果我有像CV7 1998、CV8 1998这样的值,它需要替换为Sql 如何替换单个select语句中的多个字符串?,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我试图替换表中的字符串,但无法得到所需的内容。下面是我尝试过的替换strigns的示例代码 问题:我需要用精确匹配的值替换字符串“CV7+CV8” 例如:如果我有像CV7 1998、CV8 1998这样的值,它需要替换为CV7 1998+CV8 1998,没有任何重复项。所以我想要的是 CV7 1998 + CV8 1998 CV7 1999 + CV8 1999 . . 如何在一个单独的语句中实现这一点 Begin Declare @variable as varchar(50) set
CV7 1998+CV8 1998
,没有任何重复项。所以我想要的是
CV7 1998 + CV8 1998
CV7 1999 + CV8 1999
.
.
如何在一个单独的语句中实现这一点
Begin
Declare @variable as varchar(50)
set @variable = 'CV7 + CV8'
CREATE TABLE #CVtableforallyears
(
Outcomedestination Varchar(160),
TimeDimensionDatefromCV date
)
Insert into #CVtableforallyears values
('CV7 1998','1998-01-01'),
('CV7 1999','1999-01-01'),
('CV7 2000','2000-01-01'),
('CV7 2001','2001-01-01'),
('CV7 2002','2002-01-01'),
('CV8 1998','1998-01-01'),
('CV8 1999','1999-01-01'),
('CV8 2000','2000-01-01'),
('CV8 2001','2001-01-01'),
('CV8 2002','2002-01-01')
Select Replace(REPLACE(@variable,'CV7',LTRIM (RTRIM (Outcomedestination))),'CV8',Outcomedestination) from #CVtableforallyears
Drop table #CVtableforallyears
END
你应该这样做:
SELECT DISTINCT
substring(
(SELECT
DISTINCT ' + ' + t2.Outcomedestination
FROM #CVtableforallyears t2
WHERE t2.TimeDimensionDatefromCV = t1.TimeDimensionDatefromCV
FOR XML Path ('')
)
,4,1000) --just to omit the first ' + '
FROM #CVtableforallyears t1;
END
它适用于个人简历和2个以上的个人简历
编辑以减少不必要的内容。下面的示例演示如何对XML路径使用,然后如何在完整查询中使用它
基本上,我们将整个查询连接成一个字符串,但使用'
来拆分自然发生的
位置;我们用'+'
连接每个结果。然后使子查询只选择与父查询匹配的项。使用DISTINCT
避免重复。不幸的是,TSQL中没有listag
,所以我们使用这种方法
不需要使用REPLACE语句来执行此操作
WITH cv7 AS
(
SELECT
Outcomedestination,
TimeDimensionDatefromCV,
RIGHT(LTRIM(RTRIM(Outcomedestination)), 4) AS year
FROM #CVtableforallyears
WHERE LEFT(LTRIM(RTRIM(Outcomedestination)), 3) = N'CV8'
),
cv8 AS
(
SELECT
Outcomedestination,
TimeDimensionDatefromCV,
RIGHT(LTRIM(RTRIM(Outcomedestination)), 4) AS year
FROM #CVtableforallyears
WHERE LEFT(LTRIM(RTRIM(Outcomedestination)), 3) = N'CV8'
)
SELECT cv7.Outcomedestination + N' + ' + cv8.Outcomedestination
FROM cv7
INNER JOIN cv8
ON cv7.year = cv8.year
结果如下:
CV8 1998 + CV8 1998
CV8 1999 + CV8 1999
CV8 2000 + CV8 2000
CV8 2001 + CV8 2001
CV8 2002 + CV8 2002
发布(通过使用添加到你的问题)你想要的结果。嗨。。。发布了我所需的输出。。。让我知道这是否合适…这只是一个大型存储过程的一小部分,我有这个要求要做…匹配的标准是基于时间维度相同,还是基于字符串输出测试中的年份相同?请根据您的示例数据发布准确的所需结果。