Tsql 在T-SQL中使用通配符进行替换

Tsql 在T-SQL中使用通配符进行替换,tsql,Tsql,我完全知道MS T-SQL不支持正则表达式,但我的项目中需要类似的功能。我没有提取数据、从外部操作数据并重新插入到表中的选项,因此我尝试使用SQLReplace语句 我的问题如下:在我的SQL表中,我有一个文本字段,它存储如下内容:“一些字符^&20^&20^一些字符^&3^&3^一些字符^&134^&134^一些字符^&20^&134^&134^一些字符……” 现在,我尝试用相同的字符串^&500^&500^替换^-字符(如^&20^&20^和^&3^&3^和^&134^&134^等)之间的所

我完全知道MS T-SQL不支持正则表达式,但我的项目中需要类似的功能。我没有提取数据、从外部操作数据并重新插入到表中的选项,因此我尝试使用SQLReplace语句

我的问题如下:在我的SQL表中,我有一个文本字段,它存储如下内容:“一些字符^&20^&20^一些字符^&3^&3^一些字符^&134^&134^一些字符^&20^&134^&134^一些字符……”

现在,我尝试用相同的字符串^&500^&500^替换^-字符(如^&20^&20^和^&3^&3^和^&134^&134^等)之间的所有数字1…499。 如何在SQL中实现这一点。谢谢你的帮助


提前感谢

您不清楚要用什么替换文本。此解决方案假设您希望将小于500的数字(如下所示:^&11^)替换为其他数字。我创建了一个变量(@replaceTxt),以便您可以处理结果。我的解决方案使用


编辑:在示例数据中包含一个电话号码,以表明并非所有号码都使用此解决方案更改

请阅读一些关于改进您的问题的提示。使用适当的软件(MySQL、Oracle、DB2等)和版本(例如,
sql-server-2014
)标记数据库问题很有帮助。语法和特征的差异通常会影响答案。请注意,
tsql
缩小了选择范围,但没有指定数据库。感谢您的快速回答,很抱歉不清楚。我的工作环境是MS SQL Server 2012。源字符串与您使用的字符串类似:“诸如此类^&20^&20^……我的电话号码是555-1234一些字符^&3000^&3000^一些字符^&134^&134^一些字符^&20^&20^。。。使用相同的字符串^&600^&600^…'。在此字符串中,每次出现“^&[0-9]^&[0-9]^-[0-9][0-9]^-[0-9][0-9]^-[0-9][0-9]^-[0-9][0-9][0-9]^-[0-9][0-9][0-9][0-9]^-[0-9][0-9]^-[0-9][0-9]^-[0-9]^-[0-9][0-9]^-[0-9]^-[0-9]都应替换为“^-[0-9][0-9][0-9][0-9][0-9][0-9]^-[0-9]^-[0-9]^-[0-9]^(下面,@String=CASE…)在修复patternSplitCM后没有错误。`然后尝试将您的解决方案与patternSplitCM组合,但现在我得到以下错误:
declare @string varchar(8000) =
'blah blah blah... ^&20^&20^ ...my phone number is 555-1234 some characters ^&3000^&3000^ some characters ^&134^&134^ some characters ^&20^&20^... with the same string ^&600^&600^...';
declare @replaceTxt varchar(50) = '555';

select newstring = 
(
select --ps.*,
  case when matched = 1 and 
      (charindex('^', ps.item)*charindex('&', ps.item)*patindex('%[0-9]%', ps.item)) <> 0
    then 
    replace((
      select case when cast(item as int) < 500 then '^&'+@replaceTxt+'^' else '^&'+item+'^' end
      from dbo.PatternSplitCM(ps.item, '[0-9]') 
      where [Matched]=1 for xml path(''), type).value('.', 'varchar(8000)'), '^^', '^')
    else item end +''
from dbo.PatternSplitCM(@string, '[0-9&^]') ps
order by ps.ItemNumber
for xml path(''), type
).value('.', 'varchar(8000)');
blah blah blah... ^&555^&555^ ...my phone number is 555-1234 some characters ^&3000^&3000^ some characters ^&555^&555^ some characters ^&555^&555^... with the same string ^&600^&600^...