Sql 当字符串长度为动态时,替换字符串文本的特定部分
我正在尝试使用sql进行字符串操作,该sql会更改“str[”之后的文本(已经使用dbo.function从表中提取了字符串) 原始字符串如下所示:Sql 当字符串长度为动态时,替换字符串文本的特定部分,sql,Sql,我正在尝试使用sql进行字符串操作,该sql会更改“str[”之后的文本(已经使用dbo.function从表中提取了字符串) 原始字符串如下所示: 2.2.2.3[1.2.3]-4.3.2.1-t+3-kb-str[8.6.5.4.3] 结果是: 2.2.2.3[1.2.3]-4.3.2.1-t+3-kb-str[10.8.6.5.4] 字符串长度通常可以大于或小于'str'之前的字符长度['由于字符串中有括号,我不能将其用作保留。只是想知道是否有人有一些建议。以下脚本是根据SQL Serve
2.2.2.3[1.2.3]-4.3.2.1-t+3-kb-str[8.6.5.4.3]
结果是:
2.2.2.3[1.2.3]-4.3.2.1-t+3-kb-str[10.8.6.5.4]
字符串长度通常可以大于或小于'str'之前的字符长度['由于字符串中有括号,我不能将其用作保留。只是想知道是否有人有一些建议。以下脚本是根据SQL Server编写的,但您可以将相同的逻辑应用于其他语法已更改的数据库- 注意:这只适用于目标字符串是源字符串的最后一部分,并且新字符串是固定的“str[10.8.6.5.4]”
DECLARE @S VARCHAR(MAX) = '2.2.2.3[1.2.3] - 4.3.2.1 - t+ 3 - kb - str[8.6.5.4.3]'
SELECT LEFT (@S, CHARINDEX('str[', @S,0) - 1) + 'str[10.8.6.5.4]'
假设您使用的是SQL Server,以下查询包含
reverse()
,charindex()
,replace()
,substring()
和parsename()
可能会一起使用:
with t(str0) as
(
select '2.2.2.3[1.2.3] - 4.3.2.1 - t+ 3 - kb - str[8.6.5.4.3]'
), t2 as
(
select reverse(substring(reverse(str0),2,charindex('[',reverse(str0))-2)) as str,
str0
from t
)
select replace( str0, str,
concat(
'10.',
substring(str,1,charindex('.',str)-1),'.',
parsename(substring(str,charindex('.',str)+1,len(str)),4),'.',
parsename(substring(str,charindex('.',str)+1,len(str)),3),'.',
parsename(substring(str,charindex('.',str)+1,len(str)),2)) ) as Result
from t2;
其中,假定点数固定,以便能够使用parsename()
请标记适当的数据库名称。请确认预期的替换参数是否始终是字符串的最后一部分?它将始终是字符串的最后一部分。我认为,就数据库It SQL Server而言,MSSQL也适用于此