SQL クエリを使用して、フル パスからファイル名とファイル パスを解析する必要があります。
例えば。フルパス - \SERVER\D$\EXPORTFILES\EXPORT001.csv
FileName Path
EXPORT001.csv \\SERVER\D$\EXPORTFILES\
SQL クエリを使用して、フル パスからファイル名とファイル パスを解析する必要があります。
例えば。フルパス - \SERVER\D$\EXPORTFILES\EXPORT001.csv
FileName Path
EXPORT001.csv \\SERVER\D$\EXPORTFILES\
これを使って -
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]
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
テストコード:
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
どうですか:
reverse(LEFT(REVERSE(FileName),
Coalesce(nullif(CHARINDEX('\', REVERSE(FileName))-1, -1), len(FileName))
))
奇妙なことですが、それは\
問題を回避してインラインで実行できることを意味します。
使い方REVERSE
が見やすくなる
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]
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