You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用同一数据表中某列的部分内容替换另一列的全部内容?

用同一数据表某列的部分内容替换另一列的实现方案

嘿,这个需求挺典型的!核心就是从columnA里提取最后一段(比如/home/docs/test1里的test1),然后把columnB全表替换成这个提取出来的值。下面我分几种主流数据库给你具体的SQL写法,你对应自己用的数据库来就行:

MySQL/MariaDB 实现

用SUBSTRING_INDEX函数就很方便,这个函数可以按指定分隔符截取字符串,最后一个参数写-1表示取最后一段:

-- 先测试提取结果是否正确
SELECT columnA, SUBSTRING_INDEX(columnA, '/', -1) AS target_value
FROM your_table_name;

-- 确认没问题后执行更新
UPDATE your_table_name
SET columnB = SUBSTRING_INDEX(columnA, '/', -1);

PostgreSQL 实现

可以用正则匹配或者字符串分割的方式,这里推荐用正则截取最后一段的写法,直观易懂:

-- 测试提取结果
SELECT columnA, regexp_replace(columnA, '.*/', '') AS target_value
FROM your_table_name;

-- 执行更新
UPDATE your_table_name
SET columnB = regexp_replace(columnA, '.*/', '');

或者用split_part结合数组长度的方式,也能实现:

UPDATE your_table_name
SET columnB = split_part(columnA, '/', array_length(string_to_array(columnA, '/'), 1));

SQL Server 实现

这里需要借助REVERSE和CHARINDEX来定位最后一个/的位置:

-- 测试提取结果
SELECT columnA, 
       REVERSE(SUBSTRING(REVERSE(columnA), 1, CHARINDEX('/', REVERSE(columnA)) - 1)) AS target_value
FROM your_table_name;

-- 执行更新
UPDATE your_table_name
SET columnB = REVERSE(SUBSTRING(REVERSE(columnA), 1, CHARINDEX('/', REVERSE(columnA)) - 1));

Oracle 实现

用REGEXP_SUBSTR正则截取是最简洁的,直接匹配最后一个/后面的所有内容:

-- 测试提取结果
SELECT columnA, REGEXP_SUBSTR(columnA, '[^/]+$') AS target_value
FROM your_table_name;

-- 执行更新
UPDATE your_table_name
SET columnB = REGEXP_SUBSTR(columnA, '[^/]+$');

重要提醒

别忘了在执行UPDATE之前,一定要先跑SELECT语句验证提取的结果是不是你想要的test1这类值! 避免因为函数参数写错或者数据格式不一致导致更新错误,如果是生产环境,最好先备份表再操作哦~

内容的提问来源于stack exchange,提问作者udhkl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:59