2012-03-01 150 views
3

我需要使用REPLACE編寫sql更新語句。該字符串看起來像'SE * 88 * 000000001'。我需要替換兩個星號'*'之間的數字。這裏沒有任何模式,除了被替換的數字總是在兩個星號之間。在這種情況下可以使用通配符嗎?SQL更新替換語句

感謝您的幫助。

謝謝!

+2

哪一種口味SQL的? – 2012-03-01 22:30:25

+1

可能依賴於您正在使用的數據庫系統。 – 2012-03-01 22:30:29

+0

SQL Server 2008 R2 – OBL 2012-03-01 22:33:17

回答

7
; 
WITH RowSetToUpdate AS (
    SELECT 
    acolumn, 
    Asterisk1Pos = CHARINDEX('*', acolumn), 
    Asterisk2Pos = CHARINDEX('*', acolumn, CHARINDEX('*', acolumn) + 1) 
    FROM atable 
    WHERE acolumn LIKE '%*%*%' 
) 
UPDATE RowSetToUpdate 
SET acolumn = STUFF(
    acolumn, 
    Asterisk1Pos + 1, 
    Asterisk2Pos - Asterisk1Pos - 1, 
    'replacement_string' 
) 

或者如果它是要被替換這是一個具體的數字,那麼這將是更簡單:

UPDATE atable 
SET acolumn = REPLACE(acolumn, '*88*', '*replacement_string') 
WHERE acolumn LIKE '%*88*%' 
2

您可以嘗試使用PARSENAME函數。喜歡的東西:

UPDATE YourTable 
SET YourColumn = 
     PARSENAME(REPLACE(YourColumn, '*', '.'), 3) 
    + '*' 
    + 'whatever you want to replace the number with' 
    + '*' 
    + PARSENAME(REPLACE(YourColumn, '*', '.'), 1) 

這工作,只要值永遠不會包含在號碼段,只有兩個*的。

+0

使用'PARSENAME()'的好主意! – 2012-03-01 22:46:28

+0

謝謝。儘管我確實喜歡你的回答。這可能被認爲是一種破解,但如果它有效,那很好。 – kevev22 2012-03-01 22:52:43

+0

不起作用。 PARSENAME有什麼用途? – OBL 2012-03-01 23:50:00