2012-03-01 22 views
3

Мне нужно написать инструкцию обновления sql с помощью REPLACE. Строка выглядит как «SE * 88 * 000000001». Мне нужно заменить номер между двумя звездочками *. Здесь нет рисунка, кроме того, что число, которое нужно заменить, всегда находится между двумя звездочками. Можно ли использовать дикие карты в этой ситуации?Заявление о замене SQL-запроса

Цените свою помощь.

Спасибо!

+2

Какой вкус SQL? –

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

Или, если это конкретное число, которое должно быть заменено, то это было бы еще проще:

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) 

Это будет работать до тех пор, пока значение никогда не содержит периодов и только два * s вокруг числа.

+0

Приятная идея использовать 'PARSENAME()'! –

+0

Спасибо. Мне нравится ваш ответ. Это можно считать немного взломанным, но если он работает, отлично. – kevev22

+0

Не работает. Какая польза от PARSENAME? – OBL

Смежные вопросы