Оператор замены SQL Update - PullRequest
       14

Оператор замены SQL Update

3 голосов
/ 02 марта 2012

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

Благодарим Вас за помощь.

Спасибо!

Ответы [ 2 ]

7 голосов
/ 02 марта 2012
;
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 голосов
/ 02 марта 2012

Вы можете попробовать использовать функцию PARSENAME. Что-то вроде:

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

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

...