Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何替换单个select语句中的多个字符串?_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

Sql 如何替换单个select语句中的多个字符串?

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

我试图替换表中的字符串,但无法得到所需的内容。下面是我尝试过的替换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 @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

发布(通过使用添加到你的问题)你想要的结果。嗨。。。发布了我所需的输出。。。让我知道这是否合适…这只是一个大型存储过程的一小部分,我有这个要求要做…匹配的标准是基于时间维度相同,还是基于字符串输出测试中的年份相同?请根据您的示例数据发布准确的所需结果。