2013-10-21 6 views

उत्तर

37

इस का प्रयोग करें -

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

त्वरित प्रतिक्रिया के लिए धन्यवाद। इसने काम कर दिया! – Don

+18

क्यों न केवल: दाएं (YOUR_PATH, CHARINDEX ('\', रिवर (YOUR_PATH)) -1) –

+0

मैंने इसका परीक्षण किया है और यह पर्याप्त लगता है। एकमात्र नुकसान यह है कि यह केवल तभी काम करता है जब पथ। गेटफाइलनाम (पथ) में .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

यहाँ सबसे आसान तरीका

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) 
1

यहाँ है एक लिंक जहां है किसी ने इस आवश्यकता से संबंधित कई कार्य किए हैं:

  • फंक्शन [dbo] बनाएँ। [GetFileName]
  • बनाएं फंक्शन [dbo]। [GetFileNameWithoutExtension]
  • बनाएं फंक्शन [dbo]। [GetDirectoryPath]
  • बनाएं फंक्शन [dbo]। [GetExtension]

http://www.codeproject.com/Tips/866934/Extracting-the-filename-from-a-full-path-in-SQL-Se?msg=5145303#xx5145303xx

4

उत्तर स्टीफन स्टीगर द्वारा टिप्पणी के आधार पर:

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 

टेस्ट कोड:

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

मैं ईटीएल बहुत काम करते हैं और मैं एक समारोह है कि मैं एक वापस स्लेश के बिना इस्तेमाल कर सकते हैं और qub1n'ssolution काम करता है मान को छोड़कर बहुत अच्छा के लिए देख रहा था।

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 

नमूने::

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 

यहाँ एक LINK

+2

के बजाय 2 फ़ील्ड प्रदान किए हैं, यह समाधान है! ;) – SQueek

1

SqlFiddle करने का उपयोग करना

देखना आसान REVERSE है यहाँ qub1n के समाधान का एक छोटा ट्वीक कि तार के बिना बैक स्लैश संभाल लेंगे है
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 
संबंधित मुद्दे