【问题标题】:SQL Update Replace statementSQL 更新替换语句
【发布时间】:2012-03-20 11:27:26
【问题描述】:

我需要使用 REPLACE 编写一个 sql 更新语句。该字符串看起来像“SE*88*000000001”。我需要替换两个星号“*”之间的数字。除了要替换的数字始终位于两个星号之间之外,这里没有其他模式。在这种情况下可以使用通配符吗?

感谢您的帮助。

谢谢!

【问题讨论】:

  • 可能取决于您使用的数据库系统。
  • 有没有办法用正则表达式来实现它?谢谢!

标签: sql sql-server-2008 replace wildcard


【解决方案1】:

您可以尝试使用PARSENAME 函数。比如:

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

只要该值从不包含句点并且数字周围只有两个 *,这将起作用。

【讨论】:

  • 使用PARSENAME()的好主意!
  • 谢谢。不过我很喜欢你的回答。这可能被认为是一种 hack,但如果它有效,那就太好了。
【解决方案2】:
;
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*%'

【讨论】:

    猜你喜欢
    • 2019-06-04
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 2018-04-09
    • 2014-08-06
    相关资源
    最近更新 更多