2013-12-20 189 views
-4

的一部分,我想更新的子串的兩個第一連續parameter 我想編寫一個查詢,將做如下的例子同樣的效果,johnold僅僅是一個例子如何替換字符串

a= 'parameterjohnoldparameter123parameter' 
b='aaa' 

結果將是

a= 'parameteraaaparameter123parameter' 

我怎麼能這樣做呢?

+1

在什麼基礎上取代b?我應該找什麼解釋。 – KumarHarsh

+0

@KumarHarsh我更新了我的問題 – user3014966

+0

第一個'parameter'之前是否有任何文本,或者第一個值是否始終位於第10個位置? –

回答

3

可以東西它在那裏。

declare @a varchar(30) 
declare @b varchar(30) 

set @a = 'parameterjohnoldparameter123' 
set @b = 'aaa' 

select stuff(@a, 10, 7, @b) 
-- or do a search for the second parameter string 
select stuff(@a, 10, charindex('parameter', @a, 10) - 10, @b) 
+0

+1比我的回答更好,假設被替換的部分在順序位置上工作並且是固定長度而不是特定值。 – Bridge

1

我猜你正在尋找:

SET a = REPLACE(a, 'johnold', b) 

但是,我們怎麼知道你想要第一個字符串中替換是字符串的什麼部分?我剛剛根據你的例子猜測。

0

要在單個表

UPDATE `table_name` 
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text') 
0

爲了避免使用固定長度或搜索參數,你可以使用:

declare @a varchar(max),@b varchar(max),@c varchar(max) 

set @a = 'parameterjohnoldparameter123parameter' --original row 
set @b = 'aaa' --value to insert 
set @c = 'parameter' --value to insert after it 

select stuff(@a, LEN(@c)+1, charindex(@c, @a, LEN(@c)+1) - LEN(@c)-1, @b) 

甚至計算LEN(@c)之前選擇一個時間。

+0

爲什麼'VARCHAR(MAX)'? – Zane

+0

因爲我們不知道每個參數的最大長度:a,b,c。我使用「max」,但如果作者知道實際最大值(例如,可替換部分來自某個列varchar(100)),我們可以使用精確值。我明白,「最大」不是性能的好主意。 –