更新 MS SQL 列中的部分字符串
Updating a part of string in column MS SQL
我正在寻找只更新列中字符串的一部分的好主意。有很多类似的问题,但我还没有找到适合我的方法。
例如我有列varchar(10)
1234|5|6789X
____________
2134|1|71891
如何在不触及字符串其余部分的情况下轻松更新字符串的第 5 个元素,没有模式。
我正在尝试使用 patindex
& substring
使用
STUFF(Column_Name,Char_Index_Start_Position,Lenght_to_Replace,Replaced_string)
针对你的情况试试
STUFF(column_name,5,1,'1')
怎么样Stuff
SELECT Stuff('1234|5|6789X', 6, 1, '1')
由于您的专栏是 varchar(10)
,我假设您提供给我们的数据有问题
1234|5|6789X
____________
2134|1|71891
|5|
和 |1|
需要替换。
正如许多人已经指出的那样,您可以使用 STUFF
但是正确的实现方式是
SELECT CASE WHEN LEN (col) >4 THEN STUFF(col,5,1,'X')
ELSE col END FROM tbl
其中 tbl
是您的 table 名称,col
是您的列名称,并将 'X'
替换为您想要的替换内容。
解释:之所以使用CASE
是因为如果STUFF
在上述语句中遇到一个没有第5个字符的字符串,那么它returns NULL
.
我正在寻找只更新列中字符串的一部分的好主意。有很多类似的问题,但我还没有找到适合我的方法。
例如我有列varchar(10)
1234|5|6789X
____________
2134|1|71891
如何在不触及字符串其余部分的情况下轻松更新字符串的第 5 个元素,没有模式。
我正在尝试使用 patindex
& substring
使用
STUFF(Column_Name,Char_Index_Start_Position,Lenght_to_Replace,Replaced_string)
针对你的情况试试
STUFF(column_name,5,1,'1')
怎么样Stuff
SELECT Stuff('1234|5|6789X', 6, 1, '1')
由于您的专栏是 varchar(10)
,我假设您提供给我们的数据有问题
1234|5|6789X
____________
2134|1|71891
|5|
和 |1|
需要替换。
正如许多人已经指出的那样,您可以使用 STUFF
但是正确的实现方式是
SELECT CASE WHEN LEN (col) >4 THEN STUFF(col,5,1,'X')
ELSE col END FROM tbl
其中 tbl
是您的 table 名称,col
是您的列名称,并将 'X'
替换为您想要的替换内容。
解释:之所以使用CASE
是因为如果STUFF
在上述语句中遇到一个没有第5个字符的字符串,那么它returns NULL
.