2013-10-21 34 views

Trả lời

37

Sử dụng này -

DECLARE @full_path VARCHAR(1000) 
SET @full_path = '\\SERVER\D$\EXPORTFILES\EXPORT001.csv' 

SELECT LEFT(@full_path,LEN(@full_path) - charindex('\',reverse(@full_path),1) + 1) [path], 
     RIGHT(@full_path, CHARINDEX('\', REVERSE(@full_path)) -1) [file_name] 
+0

Cảm ơn bạn đã phản hồi nhanh. Nó đã làm việc! – Don

+18

Tại sao không chỉ: RIGHT (YOUR_PATH, CHARINDEX ('\', REVERSE (YOUR_PATH)) -1) –

+0

Tôi đã thử nghiệm nó và nó có vẻ đủ. Bất lợi duy nhất là điều này chỉ hoạt động nếu dấu gạch chéo ngược nếu có sẵn trong constrast để Path.GetFileName (đường dẫn) trong NET – qub1n

1
Declare @filepath Nvarchar(1000) 
Set @filepath = 'D:\ABCD\HIJK\MYFILE.TXT' 

    --Using Left and Right 
    Select LEFT(@filepath,LEN(@filePath)-CHARINDEX('\',REVERSE(@filepath))+1) Path, 
     RIGHT(@filepath,CHARINDEX('\',REVERSE(@filepath))-1) FileName 

    -- Using Substring  
    Select SUBSTRING(@filepath,1,LEN(@filepath)-CHARINDEX('\',REVERSE(@filepath))+1) Path, 
     REVERSE(SUBSTRING(REVERSE(@filepath),1,CHARINDEX('\',REVERSE(@filepath))-1)) FileName 
3

Đây là cách đơn giản nhất

DECLARE @full_path VARCHAR(1000) 
SET @full_path = '\\SERVER\D$\EXPORTFILES\EXPORT001.csv' 
SELECT LEFT(@full_path, LEN(@full_path) - CHARINDEX('\', REVERSE(@full_path)) - 1), 
     RIGHT(@full_path, CHARINDEX('\', REVERSE(@full_path)) - 1) 
4

trả lời dựa trên nhận xét của Stefan Steiger:

Create FUNCTION GetFileName 
(
@fullpath nvarchar(260) 
) 
RETURNS nvarchar(260) 
AS 
BEGIN 
DECLARE @charIndexResult int 
SET @charIndexResult = CHARINDEX('\', REVERSE(@fullpath)) 

IF @charIndexResult = 0 
    RETURN NULL 

RETURN RIGHT(@fullpath, @charIndexResult -1) 
END 
GO 
đang

Test:

DECLARE @fn nvarchar(260) 

EXEC @fn = dbo.GetFileName 'AppData\goto\image.jpg' 
PRINT @fn -- prints image.jpg 

EXEC @fn = dbo.GetFileName 'c:\AppData\goto\image.jpg' 
PRINT @fn -- prints image.jpg 

EXEC @fn = dbo.GetFileName 'image.jpg' 
PRINT @fn -- prints NULL 
10

tôi làm rất nhiều công việc ETL và tôi đang tìm kiếm một chức năng mà tôi có thể sử dụng và qub1n'ssolution công trình rất tốt, ngoại trừ cho các giá trị mà không có một dấu back slash. Dưới đây là một chút tinh chỉnh các giải pháp qub1n rằng sẽ xử lý chuỗi không dấu back slash:

Create FUNCTION fnGetFileName 
(
    @fullpath nvarchar(260) 
) 
RETURNS nvarchar(260) 
AS 
BEGIN 
    IF(CHARINDEX('\', @fullpath) > 0) 
     SELECT @fullpath = RIGHT(@fullpath, CHARINDEX('\', REVERSE(@fullpath)) -1) 
     RETURN @fullpath 
END 

Samples:

SELECT [dbo].[fnGetFileName]('C:\Test\New Text Document.txt') --> New Text Document.txt 
    SELECT [dbo].[fnGetFileName]('C:\Test\Text Docs\New Text Document.txt') --> New Text Document.txt 
    SELECT [dbo].[fnGetFileName]('New Text Document.txt') --> New Text Document.txt 
    SELECT [dbo].[fnGetFileName]('\SERVER\D$\EXPORTFILES\EXPORT001.csv') --> EXPORT001.csv 

Đây là một LINK để SqlFiddle

+2

cho tôi IS này là giải pháp! ;) – SQueek

1

Sử dụng REVERSE là dễ dàng hơn để xem

DECLARE @full_path VARCHAR(1000) 
SET @full_path = '\\SERVER\D$\EXPORTFILES\EXPORT001.csv' 

select REVERSE(LEFT(REVERSE(@full_path),CHARINDEX('\',REVERSE(@full_path))-1)) as [FileName], 
     replace(@full_path, REVERSE(LEFT(REVERSE(@full_path),CHARINDEX('\',REVERSE(@full_path))-1)),'') as [FilePath] 
0
select 
LTRIM(
RTRIM(
REVERSE(
SUBSTRING(
REVERSE(Filename),0,CHARINDEX('\',REVERSE(Filename),0)) 
))) 
from TblFilePath 
Các vấn đề liên quan