[英]How to update text using “regular expressions” in SQL Server?
在SQL Server数据库表的列中,该值的格式为X=****;Y=****;Z=5****
,其中星号表示任意长度和任何值的字符串。 我需要做的是将5更改为4,并保持其余字符串不变。
有没有办法使用正则表达式之类的东西来实现我想做的事情? 如果不使用正则表达式,可以完全做到吗?
遗憾的是,MS SQL没有任何内置的正则表达式支持(尽管可以通过CLR添加),但是如果格式是固定的,则要更改的部分是Z=5
到Z=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.