如何在SQL Server列中删除最后一个'/'及之后的所有内容
SQL Server 移除URL最后一个'/'及之后内容的解决方案
需求:处理SQL Server中nvarchar(1000)类型的full_url列,将类似http://www.example.com/folder/subfolder/somemorefolder/document.txt的URL,删除最后一个/及其之后的所有内容,得到http://www.example.com/folder/subfolder/somemorefolder。
你提到的MySQL方案无法直接在SQL Server中使用,自己尝试的语句也存在参数错误问题。这里提供两种可行的SQL写法:
方法一:使用LEFT函数(推荐)
SELECT LEFT(full_url, LEN(full_url) - CHARINDEX('/', REVERSE(full_url))) AS trimmed_url FROM myTable
方法二:使用SUBSTRING函数
如果习惯用SUBSTRING,需要调整参数位置(SUBSTRING的第二个参数是起始索引,第三个是截取长度):
SELECT SUBSTRING(full_url, 1, LEN(full_url) - CHARINDEX('/', REVERSE(full_url))) AS trimmed_url FROM myTable
逻辑说明
REVERSE(full_url):将原URL反转,让原本最后一个/变成字符串开头第一个出现的/CHARINDEX('/', REVERSE(full_url)):获取反转后第一个/的位置,这个数值等于原URL中最后一个/到末尾的字符数(包括/本身)LEN(full_url) - 上述数值:计算出需要保留的字符串长度(从开头到最后一个/的前一位)- 通过
LEFT或SUBSTRING截取对应长度的字符串,得到目标结果
特殊情况处理(可选)
如果存在URL末尾本身就是/的情况(比如http://example.com/folder/),上述语句会删除这个末尾的/。如果需要保留末尾/,可以添加判断逻辑:
SELECT CASE WHEN RIGHT(full_url, 1) = '/' THEN full_url ELSE LEFT(full_url, LEN(full_url) - CHARINDEX('/', REVERSE(full_url))) END AS trimmed_url FROM myTable
内容的提问来源于stack exchange,提问作者STORM
相关产品推荐
相关产品推荐

