【问题标题】:Can SQL REPLACE function as a "find and replace" on both strings and substrings?SQL REPLACE 可以作为字符串和子字符串的“查找和替换”功能吗?
【发布时间】:2019-12-17 16:04:28
【问题描述】:

我有一个盒子内盒子的数据库。最大嵌套深度为 10,因此每个框最多可以有 9 个父位置或子位置。一个字段包含每个框的层次结构 - 即对于位于 ABC 内的框 DEF:

SELECT hierarchy from INVENTORY WHERE boxname = 'DEF' 返回“ABC -> DEF”。

我现在需要允许用户重命名框。我正在尝试使用 SQL 的 REPLACE 函数来完成此操作,但据我所知,它不能在子字符串上工作。我试过了:

update inventory
set hierarchy = replace(hierarchy, 'DEF', 'XYZ')

这不会像我期望的那样将层次结构更新为“ABC -> XYZ”

我希望把它当成一个“Ctrl+F查找和替换”的功能,但是好像不能做到以下几点

  1. 查找包含字符串的所有字段,包括子字符串。
  2. 替换给定记录的所有字段中的所有匹配项。

有人知道这两种方法是否真的可行吗?

我正在使用 TSQL。

按要求提供样本数据:

输入

| name  | parent1  | parent2  | ...  | hierarchy         |
|  ---  |  ---     |  ---     | ---  |   ---             |
| DEF   | ABC      |          |      | ABC -> DEF        |
| JKL   | DEF      |  ABC     |      | ABC -> DEF -> JKL |

输出

| name  | parent1  | parent2  | ...  | hierarchy         |
|  ---  |  ---     |  ---     | ---  |   ---             |
| XYZ   | ABC      |          |      | ABC -> XYZ        |
| JKL   | XYZ      |  ABC     |      | ABC -> XYZ -> JKL |

【问题讨论】:

  • 请提供样本数据和期望的结果。
  • 已添加,如果您需要更多信息,请告诉我
  • 欢迎来到 Stack Overflow!样本数据最好使用DDL + DML。请edit您的问题包含它。
  • 这太复杂了。我自己想办法。
  • 太复杂了?查看 SQL Fiddle,他们有一个很好的小链接,他们称之为 Text to DDL - 您可以在其中粘贴文本,他们会为您创建 DDL 和 DML。当然,您始终可以在 SSMS 中选择script table as...。至少,我们需要知道hierarchy 列的数据类型。

标签: sql database tsql


【解决方案1】:

不,这是不可能的。带有 REPLACE 的 SQL UPDATE 不能用作“查找和替换”。 SQL 没有此功能。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多