这应该是一个简单的,但我没有找到合适的解决方案。
我需要使用SQL(SQL Server)实现(相当)简单替换,如下所示。想象一下,你有一个看起来像这样的字符串:
'This is a simple example where aaa[0004] should become aaa[4] and b[0],c[1] should remain unchanged'
换句话说,模式[0004]
应该变为[4]
。
我最初想过更换像:
SET @MyString = REPLACE(@MyString,'[0','[') ;
但是,即使在测试之前,我意识到它也会将[0]
转换为[]
,这不是我想要的。
我知道如何在PL / SQL中完成它,但在SQL Server中我遇到了困难。
答案 0 :(得分:2)
另一种选择。这将取代最多25次出现'[0'和每行多次[...]。
示例强>
Declare @MyString varchar(max) = 'This [0] [000] is a simple example where aaa[0004] should become aaa[4] and test [0]'
Select @MyString = Replace(@MyString,MapFrom,MapTo)
From (
Select MapFrom='0]',MapTo='§§0]'
Union All
Select Top 25 '[0','[' From master..spt_values
Union All
Select '§§0]','0]'
) b
Select @MyString
<强>返回强>
This [0] [0] is a simple example where aaa[4] should become aaa[4] and test [0]
注意:如果处理表格,应用某些XML将是一件小事
答案 1 :(得分:1)
答案 2 :(得分:0)
感谢Martin的建议,我采用了以下解决方案:
Declare @MyString varchar(max) ;
Declare @MyString_T varchar(max) ;
SET @MyString = 'This is a simple example where aaa[00000000000000000000000000004] should become aaa[40] and test [000] and ccc[]' ;
WHILE (1=1)
BEGIN
SET @MyString_T = REPLACE(
REPLACE(
REPLACE(@MyString,'0]', '~'),
'[0','['),
'~','0]') ;
IF @MyString_T = @MyString
BREAK ;
ELSE
SET @MyString = @MyString_T ;
END ;
Print(@MyString) ;
结果是:
This is a simple example where aaa[4] should become aaa[40] and test [0] and ccc[]
再次感谢Martin !!!