繁体   English   中英

如何在SQL Server中使用“正则表达式”更新文本?

[英]How to update text using “regular expressions” in SQL Server?

在SQL Server数据库表的列中,该值的格式为X=****;Y=****;Z=5**** ,其中星号表示任意长度和任何值的字符串。 我需要做的是将5更改为4,并保持其余字符串不变。

有没有办法使用正则表达式之类的东西来实现我想做的事情? 如果不使用正则表达式,可以完全做到吗?

遗憾的是,MS SQL没有任何内置的正则表达式支持(尽管可以通过CLR添加),但是如果格式是固定的,则要更改的部分是Z=5Z=4则使用REPLACE应该可以:

REPLACE(your_string,'Z=5','Z=4')

例如:

declare @t table (str varchar(max))
insert @t values 
('X=****;Y=****;Z=5****'),
('X=****;Y=**df**;Z=3**sdf**'),
('X=11**;Y=**sdfdf**;Z=5**')

update @t
set str = replace(str,'Z=5','Z=4')

-- or a slightly more ANSI compliant and portable way
update @t
set str = SUBSTRING(str,0, CHARINDEX('Z=5', str)) + 'Z=4' + SUBSTRING(str, CHARINDEX('Z=5', str)+3,LEN(str))


select * from @t

str:
X=****;Y=****;Z=4****
X=****;Y=**df**;Z=3**sdf**
X=11**;Y=**sdfdf**;Z=4**

我们需要更多信息。 在什么情况下应将5替换为4? 如果它只是在Z =之后的第一个字符处出现,那么您只需...

set Col = Replace(Col,'Z=5','Z=4')

或者,您是否只想在列值中的任何地方用4替换5。 在这种情况下,您显然会...

set Col = Replace(Col,'5','4')

也许您的意思是在Z =之后的值内的任何地方都应该用5替换为5,这会更困难。

update Table set Field = replace(Field, ';Z=5', ';Z=4')

并希望您的星号数据不包含分号和等号...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM