MySQL如何截断URL前缀仅保留末尾名称?
正确截断URL前缀的SQL语句方案
我来帮你搞定这个URL截断的问题~先拆解下你之前两个语句的问题:
- 第一个语句
UPDATEtableSETurlWHERE LEFT (url, 37) = 'http://example.com/path1/path2/path3/':核心问题是SETurl``后面没有指定要赋值的内容,这会导致所有匹配条件的url被置为默认值(比如NULL),完全不符合只保留末尾名称的需求。 - 第二个语句
UPDATEtableSET LEFT(url, 37) = '' WHERE LEFT(url, 37) = 'http://example.com/path1/path2/path3/':属于SQL语法错误,SET后面的格式必须是列名=表达式,不能把函数作为左侧的赋值对象,数据库无法识别这种写法。
两种可行的正确解决方案
方案一:固定长度前缀截取(适合前缀长度确定的场景)
你已经确认目标前缀http://example.com/path1/path2/path3/的长度是37个字符,直接从第38位开始截取字符串即可:
UPDATE `table` SET `url` = SUBSTRING(`url`, 38) WHERE LEFT(`url`, 37) = 'http://example.com/path1/path2/path3/'
方案二:REPLACE替换前缀(更灵活的通用方案)
如果担心前缀长度有变动,或者想更直观地替换指定前缀,可以用REPLACE函数,同时用LIKE过滤确保只修改符合条件的URL:
UPDATE `table` SET `url` = REPLACE(`url`, 'http://example.com/path1/path2/path3/', '') WHERE `url` LIKE 'http://example.com/path1/path2/path3/%'
关键操作提醒
执行UPDATE操作前,一定要先通过SELECT语句验证结果是否正确,避免误改数据:
-- 测试方案一的结果 SELECT SUBSTRING(`url`, 38) AS truncated_url FROM `table` WHERE LEFT(`url`, 37) = 'http://example.com/path1/path2/path3/' -- 测试方案二的结果 SELECT REPLACE(`url`, 'http://example.com/path1/path2/path3/', '') AS truncated_url FROM `table` WHERE `url` LIKE 'http://example.com/path1/path2/path3/%'
确认输出的truncated_url是你想要的name1、name2等结果后,再执行UPDATE操作。
内容的提问来源于stack exchange,提问作者Muhammad Faisal
相关产品推荐
相关产品推荐

