SQL Update替换语句

时间:2012-03-01 22:27:41

标签: sql sql-server-2008 replace wildcard

我需要使用REPLACE编写一个sql update语句。字符串看起来像'SE * 88 * 000000001'。我需要替换两个星号'*'之间的数字。此处没有任何模式,那么要替换的数字总是在两个星号之间。在这种情况下是否可以使用外卡?

感谢您的帮助。

谢谢!

2 个答案:

答案 0 :(得分: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*%'

答案 1 :(得分:2)

您可以尝试使用PARSENAME功能。类似的东西:

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

只要值永远不包含句点而且只包含数字周围的两个*,这就可以正常工作。