首页 > 解决方案 > 部分替换 SQL 中的字符串

问题描述

我想知道我是否可以直接在 SQL 中执行以下操作。我有一个文本格式的列,其中的值由-. 所以一个示例行值可以看起来1-42-9。我想进行选择,以便-根据某种逻辑将其中的每个字符串替换为另一个字符串。举个例子,假设我的逻辑是每个等于的字符串都42应该被替换为ABCwhich 会给我1-ABC-9。这可以在SELECT声明中完成吗?

标签: sqlsqlite

解决方案


如果该列包含类似的值'1-42-9'并且您想搜索'42'以替换为'ABC',那么您必须考虑所有情况,例如:

  • '42'位于列的开头
  • '42'位于列的中间
  • '42'位于列的末尾
  • '42'是该列的唯一值

这 4 种情况可以用更复杂但更精确的方法来处理:

select substr(
  replace('-' || col || '-', '-42-', '-ABC-'), 
  2,
  length(replace('-' || col || '-', '-42-', '-ABC-')) - 2
) NewCol
from tablename;

请参阅演示
对于这些值:

create table tablename (col TEXT);
insert into tablename (col) values
('1-42-9'),
('42-1-9'),
('9-1-42'),
('42'),
('1-100-9');

结果是:

| NewCol  |
| ------- |
| 1-ABC-9 |
| ABC-1-9 |
| 9-1-ABC |
| ABC     |
| 1-100-9 |

推荐阅读