请教一个字符串截取的问题,分立结在线等

shyuan 2009-10-27 11:34:05
我有个备份文件:E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK

想截取“倒数第三个”斜杠\后的内容,也就是得到 “\MEV_DB_Log_ISP\FULL\A.BAK” 字符串

因为“MEV_DB_Log_ISP” 是可变的,故无法确定长度。请教这个SUBSTRING应该怎么写?
...全文
115 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jwdream2008 2009-10-27
  • 打赏
  • 举报
回复
declare @a nvarchar(100)
set @a='E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK'
select reverse(left(reverse(@a),charindex('\', stuff(stuff(reverse(@a),charindex('\', reverse(@a)),1,' '),charindex('\',stuff(reverse(@a),charindex('\', reverse(@a)),1,' ')),1,' '))))
nianran520 2009-10-27
  • 打赏
  • 举报
回复

declare @s nvarchar(100)
declare @i int,@ii int
select @i = 1, @ii = 1
select @s = 'E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK'
select @s = reverse(@s)
while charindex('\',@s,@ii) > 0
begin
set @ii = charindex('\',@s,@ii) + 1
set @i = @i+1
if @i = 4
begin
select @s = reverse(substring(@s,1,@ii-1))
break
end
end
print @s
-----------------
\MEV_DB_Log_ISP\FULL\A.BAK
shyuan 2009-10-27
  • 打赏
  • 举报
回复
多谢各位,立刻结贴
SQL77 2009-10-27
  • 打赏
  • 举报
回复
E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001

如果你前面的不变,那更简单,变的话用我楼上的可以
SQL77 2009-10-27
  • 打赏
  • 举报
回复
DECLARE @STR VARCHAR(500)
DECLARE @RESULT VARCHAR(500)
SET @STR='E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK'
SET @STR='SELECT COL ='''+REPLACE(@STR,'\',''' UNION ALL SELECT ''')+''''
PRINT @STR

--CREATE TABLE #T (ID INT IDENTITY(1,1),COL VARCHAR(50))

INSERT #T EXEC(@STR)

SELECT * FROM #T

DECLARE @RESULT VARCHAR(500)
SELECT @RESULT=ISNULL(@RESULT+'\','')+COL FROM #T
WHERE ID IN (SELECT TOP 3 ID FROM #T ORDER BY ID DESC)
SELECT '\'+@RESULT


----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
\MEV_DB_Log_ISP\FULL\A.BAK

(所影响的行数为 1 行)
navy887 2009-10-27
  • 打赏
  • 举报
回复
总长度减去前边37位的长度即可。
xiequan2 2009-10-27
  • 打赏
  • 举报
回复
declare @s varchar(500)
set @s='E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK'

select right(@s,charindex('\',reverse(@s),charindex('\',reverse(@s),charindex('\',reverse(@s))+1)+1))

/*
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
\MEV_DB_Log_ISP\FULL\A.BAK

(1 行受影响)


*/
navy887 2009-10-27
  • 打赏
  • 举报
回复
declare @a varchar(200)
set @a='E:\MSSQL\BACKUPS\DMS\MAB-MACHINE-001\MEV_DB_Log_ISP\FULL\A.BAK'
select substring(@a,37,len(@a)-37)
jwdream2008 2009-10-27
  • 打赏
  • 举报
回复
Up!
SQL77 2009-10-27
  • 打赏
  • 举报
回复
循环拆分

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧