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
相关产品推荐
相关产品推荐

