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

SQL Server中如何删除字符串末尾部分并更新对应表列

SQL Server批量更新Location表PlaceForeign列解决方案

实现逻辑

我们可以利用SQL Server的字符串反转函数REVERSE匹配到最后一个-(空格+横杠+空格)的位置,再通过截取函数LEFT保留该位置之前的内容,即可删除末尾重复的城市段。

第一步:先查询验证处理结果

批量更新前先执行查询语句,确认处理后的结果符合预期,避免误操作:

SELECT
    PlaceForeign AS 原始内容,
    LEFT(PlaceForeign, LEN(PlaceForeign) - CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1) AS 处理后内容
FROM Location
WHERE PlaceForeign LIKE '% - % - %';

第二步:执行批量更新

验证结果无误后,执行以下更新语句完成批量修改:

UPDATE Location
SET PlaceForeign = LEFT(PlaceForeign, LEN(PlaceForeign) - CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1)
WHERE PlaceForeign LIKE '% - % - %';

WHERE条件会过滤掉不符合「三段式-分隔」格式的行,避免误改其他数据。

更严谨的更新版本

如果需要确保只有末尾两段内容完全一致时才更新,避免格式不匹配的行被错误修改,可以使用以下带校验逻辑的语句:

WITH LocationSegment AS (
    SELECT
        PlaceForeign,
        -- 提取最后一段内容
        RIGHT(PlaceForeign, CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1) AS LastSeg,
        -- 提取倒数第二段内容
        RIGHT(
            LEFT(PlaceForeign, LEN(PlaceForeign) - CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1),
            CHARINDEX(' - ', REVERSE(LEFT(PlaceForeign, LEN(PlaceForeign) - CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1))) - 1
        ) AS SecondLastSeg
    FROM Location
    WHERE PlaceForeign LIKE '% - % - %'
)
UPDATE LocationSegment
SET PlaceForeign = LEFT(PlaceForeign, LEN(PlaceForeign) - CHARINDEX(' - ', REVERSE(PlaceForeign)) - 1)
WHERE LastSeg = SecondLastSeg;

注意事项

批量更新操作前建议先备份表数据,或者先在测试环境验证执行逻辑,确认无误后再在生产环境执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:54:03