2016-10-21 131 views
-1

我試圖提取給定變量文件路徑的文件名。一些路徑例子:如何從文件路徑中提取文件名

C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\CentralDB.mdf 

C:\MSSQL\DATA\CentralDB.mdf 

C:\DATA\CentralDB.mdf 

有望走出看跌應該只是文件名,即:

CentralDb.mdf CentralDB.ldf

文件路徑長度可以是不同形式的地點之間。

+3

[我如何問一個**好**問題?](http://stackoverflow.com/help/how-to-ask) - 你的問題缺乏任何類型的上下文,解釋你'試圖去做 - 很不清楚,很混亂 - 你需要改進它! –

+0

這是非常不清楚....你想實現...你想創建一個接收路徑並返回只是mdf文件名的sql函數? – Hackerman

+0

'DECLARE @t TABLE( val VARCHAR(8000) ); INSERT INTO @t(val)VALUES('C:\ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ DATA \ CentralDB.mdf'); INSERT INTO @t(val)VALUES('C:\ MSSQL \ DATA \ CentralDB.mdf'); INSERT INTO @t(val)VALUES('C:\ DATA \ CentralDB.mdf'); (VAL,CHARINDEX('\',REVERSE(val)) - 1) FROM @t;' –

回答

4

您可以使用字符串的反轉來查找第一個'\',然後取其右邊的值。

declare @var varchar(4000) 

set @var = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\CentralDB.mdf' 
select RIGHT(@var,CHARINDEX('\',REVERSE(@var))-1) 

set @var = 'C:\DATA\CentralDB.mdf' 
select RIGHT(@var,CHARINDEX('\',REVERSE(@var))-1) 

set @var = 'C:\MSSQL\DATA\CentralDB.mdf' 
select RIGHT(@var,CHARINDEX('\',REVERSE(@var))-1) 
+1

使用你的例子。 'Select RIGHT(physical_name,CHARINDEX('\',REVERSE(physical_name)) - 1) 從Sys.database_files' –

相關問題