我完全知道MS T-SQL不支持正则表达式,但我在项目中需要类似的功能。我没有提取数据的选项,在外部操作它并重新插入表中,所以我试图使用SQL REPLACE语句。
我的问题如下:在我的SQL表中,我有一个文本字段,存储这样的东西:“一些字符^& 20 ^& 20 ^一些字符^& 3 ^& 3 ^一些字符^ & 134 ^& 134 ^一些字符^& 20 ^& 20 ^一些字符^& 134 ^& 134 ^一些字符......“
现在我尝试更换^字符之间的所有数字1 ... 499(例如^& 20 ^& 20 ^和^& 3 ^& 3 ^和^& 134 ^& 134 ^等)具有相同的串^& 500 ^& 500 ^。 如何在SQL中实现这一点。任何帮助表示赞赏。
提前致谢
答案 0 :(得分:0)
您不清楚要替换文本的内容。此解决方案假设您要替换小于500的数字,如下所示:^& 11 ^与其他内容。我创建了一个变量(@replaceTxt),以便您可以使用结果。我的解决方案使用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^...
编辑:在示例数据中包含一个电话号码,表示此解决方案并未更改所有号码。