2012-03-01 11 views
3

REPLACEを使用してSQLの更新文を書く必要があります。文字列は 'SE * 88 * 000000001'のようになります。私は2つのアスタリスク '*'の間の数字を置き換える必要があります。ここに他のパターンはありません。その場合、置き換えられる数字は常に2つのアスタリスクの間です。このような状況でワイルドカードを使用することは可能ですか?SQL Update Replace文

あなたのお手伝いをお待ちしております。

ありがとうございます!

+2

? –

+1

使用しているデータベースシステムによって異なる場合があります。 –

+0

SQL Server 2008 R2 – OBL

答えて

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' 
) 

それともを交換する特定の数だ場合、それがさらに簡単になります:

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

PARSENAME機能を試してみることができます。次のようなものがあります。

これは、値にピリオドが含まれず、数値の周りに2つの*だけが含まれていれば機能します。

+0

PARSENAME()を使うのがいいですね! –

+0

ありがとうございます。私はあなたの答えが好きです。これはちょっとしたハックと見なされるかもしれませんが、それがうまくいくなら、素晴らしいことです。 – kevev22

+0

動作しません。 PARSENAMEの使い方は? – OBL