sql - 部分替换 SQL 中的字符串
问题描述
我想知道我是否可以直接在 SQL 中执行以下操作。我有一个文本格式的列,其中的值由-
. 所以一个示例行值可以看起来1-42-9
。我想进行选择,以便-
根据某种逻辑将其中的每个字符串替换为另一个字符串。举个例子,假设我的逻辑是每个等于的字符串都42
应该被替换为ABC
which 会给我1-ABC-9
。这可以在SELECT
声明中完成吗?
解决方案
如果该列包含类似的值'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 |
推荐阅读
- java - Java 11.0.11 SSL 握手失败,出现异常“没有公共命名组”
- c# - .NET XMLDocument.PreserveWhitespace:如何保留重要的空白?
- c# - 在 Azure 中使用 RSACryptoServiceProvider 的磁盘空间问题
- c# - 使用多线程使用 iTextSharp 生成 Datamatrix 会导致崩溃
- javascript - 多次转义 " 或 '
- angular - 当我通过退格键、删除按钮或 ctrl+A 从 TinymceEditor 删除时如何从服务器中删除图像/媒体文件
- java - Elasticsearch:使用 Ingest 管道更新文档
- kubernetes - 即使在设置 RBAC 授权后,Lambda 连接到 EKS 也失败
- r - 将值的行转换为每个 id 的向量
- java - aop注释后的Spring Boot 2