2

我有一个带有 sql 函数的项目的问题:

DECLARE @Var1 varchar(8000) = '{strong} this is strong{/strong} this is not strong.';

DECLARE @Var2 varchar(8000)

如果我想在'{strong}'和之间移动字符串'{/strong}'@Var2获得这个结果

@Var1 = 'this is not strong.' 
@Var2 = '{strong} this is strong {/strong}' 

我该怎么做??

PS:我还是 sql 新手 :(

谢谢

4

3 回答 3

2

试试下面的查询......它会帮助你......

declare @var1 varchar(8000)
declare @var2 varchar(8000)
set @var1 ='{strong} this is strong{/strong} this is not strong.'
select @var2 = substring(@var1,charindex('{strong}',@var1)+len('{strong}'),charindex('{/strong}',@var1)-charindex('{strong}',@var1)-len('{strong}'))
SET @var1 = REPLACE(@var1,'{strong}' + @var2 + '{/strong}','')
select @var1 as Var1,@var2 as Var2
于 2013-01-31T10:07:39.943 回答
0

Sql 不是做这种事情的最佳选择

如果我不得不,就像有人用枪指着我的孩子一样

我会做这样的事情,可能需要根据您选择的 sql 风格进行调整

这是 T-SQL

Declare v1 VarChar(255)
Declare v2 VarChar(255)


set v1 = '{Strong}$REPLACE${/Strong}'
set v2 = 'This is strong'

Select Replace(v1,'$REPLACE$',v2)

另一种方法是你必须使用 CharIndex 来查找 '}{/' 然后使用 Substring 来分割 V1(如 '{Strong}{/Strong}'),然后将它们与 v2 连接起来

于 2013-01-31T10:08:09.933 回答
0

使用LEFT,RIGHTCHARINDEX作为;

declare @start varchar(50)='{strong}', @end varchar(50)='{/strong}' 

select @var2 = left(@var1,charindex(@end,@var1,1)+len(@end)), 
       @var1= right(@var1,len(@var1)-(charindex(@end,@var1,1)+len(@end)))

SQL 演示 1

这有点疯狂但通用,并且也适用于一些文本before '{strong}' tag

declare 
@var1 varchar(100)= 'front text{strong} this is strong{/strong} this is not strong', 
@var2 varchar(100)= ''

declare @start varchar(50)='{strong}', @end varchar(50)='{/strong}' 

select @var2 = substring(myString,ci1,ci2+len(@end)-ci1), 
       @var1 = right(myString,len(myString) - (ci2+ len(@end)))
from (
    select @var1 myString, charindex(@start,@var1,1) ci1, 
           charindex(@end,@var1,charindex(@start,@var1,1)) ci2
) T  

select @var2 var2 ,@var1 var1

SQL 演示 2

--Results
VAR2                                VAR1
{strong} this is strong{/strong}    this is not strong
于 2013-01-31T10:30:49.040 回答