的一部分,我想更新的子串的兩個第一連續parameter
我想編寫一個查詢,將做如下的例子同樣的效果,johnold
僅僅是一個例子如何替換字符串
a= 'parameterjohnoldparameter123parameter'
b='aaa'
結果將是
a= 'parameteraaaparameter123parameter'
我怎麼能這樣做呢?
的一部分,我想更新的子串的兩個第一連續parameter
我想編寫一個查詢,將做如下的例子同樣的效果,johnold
僅僅是一個例子如何替換字符串
a= 'parameterjohnoldparameter123parameter'
b='aaa'
結果將是
a= 'parameteraaaparameter123parameter'
我怎麼能這樣做呢?
可以東西它在那裏。
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)
+1比我的回答更好,假設被替換的部分在順序位置上工作並且是固定長度而不是特定值。 – Bridge
我猜你正在尋找:
SET a = REPLACE(a, 'johnold', b)
但是,我們怎麼知道你想要第一個字符串中替換是字符串的什麼部分?我剛剛根據你的例子猜測。
要在單個表
UPDATE `table_name`
SET `field_name` = replace(same_field_name, 'unwanted_text', 'wanted_text')
改變來源:http://technet.microsoft.com/en-us/library/ms186862.aspx
REPLACE(string_expression , string_pattern , string_replacement)
例如:
SELECT REPLACE('Hello World', 'Hello', 'Goodbye Cruel')
GO
爲了避免使用固定長度或搜索參數,你可以使用:
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)之前選擇一個時間。
爲什麼'VARCHAR(MAX)'? – Zane
因爲我們不知道每個參數的最大長度:a,b,c。我使用「max」,但如果作者知道實際最大值(例如,可替換部分來自某個列varchar(100)),我們可以使用精確值。我明白,「最大」不是性能的好主意。 –
在什麼基礎上取代b?我應該找什麼解釋。 – KumarHarsh
@KumarHarsh我更新了我的問題 – user3014966
第一個'parameter'之前是否有任何文本,或者第一個值是否始終位於第10個位置? –