【问题标题】:How to replace a string with values from columns in a table in SQL如何用SQL中表中列的值替换字符串
【发布时间】:2014-01-26 02:27:13
【问题描述】:

我有一张如下表

Exp                                Major       Start
---------------------------------- ----------- -------
My names ar W.Major and W.Start    Hal         Bark
W.Major is a doctor                Mark        Slope

我想编写一个 SQL 查询,将 exp 列中的 W.Major 或 W.start 替换为 MajorStart 列中的值。

有人可以建议我这样做吗?

【问题讨论】:

  • 介意使用逗号或将其置于某种可读的表格格式中。我不知道您要完成什么,但如果我愿意,我很乐意提供帮助。
  • 你用的是什么数据库?
  • Exp 主要开始 __________________________________________________________ | | '我的名字是 W.Major 和 W.Start' |哈尔 |树皮 ___________________________________|________|_________________ 'W.Major 是一名医生' |马克 |斜坡 _____________________|________|_______________ 抱歉,以上内容可能更有意义?我要替换的 Exp 列中的文本。无论它在哪里显示 W.Major,我都想用 Major 列中的值替换。 W.start 也是一样

标签: sql string replace


【解决方案1】:

关键是使用了两个replace函数。

Update tablename
   set exp = replace (replace (exp, 'W.Major', major), 'W.Start', start);

阅读有关replace on MSDN 的更多信息。这个功能在所有主要的 RDBMS 中或多或少都是相同的。

编辑:

如果您不知道文本中有多少关键字和替换列,我建议您创建一个存储过程,在其中执行以下操作:

  1. 使用具有两列的临时表——一列用于搜索键,例如'W.Major',另一个是列的名称,例如'major'。请注意,您不必存储该列中的值,只需存储该列的名称。像这样:-

    key        replacement_col
    ---------- -----------------
    W.Major    major
    W.Start    start
    ... and so on.
    
  2. 现在用您的主表和这个临时表构建一个动态 SQL 循环。以您觉得舒服的方式循环。我建议使用以下循环方法:

    a) 从主表的第一行到最后一行,选择列exp

    b) 循环通过exp 的值来搜索任何搜索关键字。在临时表中查找关键字和值。

    c) 准备一个动态 SQL 语句,然后为您编写一个带有嵌套 replace 调用的更新查询。执行此动态 SQL。

【讨论】:

  • 嘿 Rachcha,假设我有 50 个这样的列,而在我的文本中,我相应地有 50 种类型的 W.[] ;你知道我怎么能做到这一点吗?
  • 简单 - 使用 50 replaces。您已经在这里介绍了很多复杂性。否则,使用业务层来执行此操作。将关键字及其替换值放入哈希表并遍历它们。那
  • 嘿,谢谢 Rachcha,有什么办法可以避免这样的硬编码。假设我事先不知道所有列,是否有类似动态查询的东西可以帮助解决这个问题?
  • 也许您可以使用存储过程。您使用的是哪个 RDBMS?
  • 已编辑。我刚刚添加了某种算法而不是实际代码。我现在只能给你一个想法。干杯!
猜你喜欢
  • 1970-01-01
  • 2010-10-23
  • 2021-08-02
  • 2017-03-25
  • 1970-01-01
  • 2013-05-01
  • 2019-05-13
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多