“列”中的值采用Name_city_age_ID
格式(下划线分隔)。
年龄总是一片空白。其他值可能为空白。因此,列中的值就像:
John_London__1223,
Mary_Paris__,
Dave____,
Smith____1012,
___2334
现在我所有行的年龄都为22岁,并且我想替换列中的所有值,因此新列应为:
John_London_22_1223,
Mary_Paris_22_,
Dave__22_,
Smith__22_1012,
__22_2334,
如何为此编写更新查询?
答案 0 :(得分:1)
使用STUFF
,但您实际上应该规范化数据。这将寻找_
的第二个实例,并添加22
。
declare @table table(col varchar(64))
insert into @table
values
('John_London__1223'),
('Mary_Paris__'),
('Dave____'),
('Smith____1012'),
('___2334')
select * from @table
--update the column
update @table
set col = stuff(col,charindex('_',col) + charindex('_',right(col,len(col) - charindex('_',col))) + 1,0,'22')
--see the results
select * from @table
答案 1 :(得分:1)
调用CHARINDEX
函数两次即可。以下是用于检查结果的SELECT查询,转换为UPDATE:
SELECT
str,
STUFF(str, CHARINDEX('_', str, CHARINDEX('_', str) + 1) + 1, 0, '22') AS newstr
FROM testdata