在MS SQL列中更新字符串的一部分

时间:2015-09-23 10:00:14

标签: sql sql-server sql-update

我正在寻找聪明的想法,只更新列中的字符串的一部分。有很多类似的问题,但我没有找到方法。

例如,我有专栏varchar(10)

1234|5|6789X
____________
2134|1|71891

如何在不触及其余字符串的情况下轻松更新字符串的第5个元素,没有模式。

我正在尝试使用patindex& substring

3 个答案:

答案 0 :(得分:4)

使用

STUFF(Column_Name,Char_Index_Start_Position,Lenght_to_Replace,Replaced_string)

为您的案例尝试

STUFF(column_name,5,1,'1')

<强> https://briancaos.wordpress.com/2014/06/12/sitecore-users-custom-profile-properties/

答案 1 :(得分:1)

Stuff

怎么样?
SELECT Stuff('1234|5|6789X', 6, 1, '1') 

答案 2 :(得分:0)

由于您的专栏是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是您的表名,col是您的列名,并将'X'替换为您想要替换的内容。

说明:使用CASE的原因是因为如果STUFF遇到上述语句中没有第5个字符的字符串,则会返回NULL。< / p>