簡體   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