我的SQL Server数据库中有一个表,如
Table1
srno Filepath
1 C:\Folder1\Folder2\Folder3\Files\File_1.70837292036d41139fcf8fa6b4997d3c.pdf
2 File_2.pdf
3 C:\File_3.pdf
4 File_4.70837292036d41139fcf8fa6b4997d3c.pdf
5
6 NULL
我只想要srno,文件名。
如何才能通过简单查询获得文件名?
所需的输出,如
srno Filename
1 File_1.pdf
2 File_2.pdf
3 File_3.pdf
4 File_4.pdf
5
6 NULL
我有一个查询,但它没有显示正确使用(srno 1和4)
Select srno, CASE WHEN LEN(CHARINDEX('\', REVERSE(ISNULL(table1.Filepath,''))))= 1 THEN ISNULL(table1.Filepath,'') ELSE REVERSE(SUBSTRING(REVERSE(ISNULL(table1.Filepath,'')), 1, CHARINDEX('\', REVERSE(ISNULL(table1.Filepath,'')))-1)) END as Filename
答案 0 :(得分:1)
反转sting并搜索第一个\
的索引。然后使用此索引获取列的右侧。
SELECT RIGHT(Filename,PATINDEX('%\%',REVERSE(Filename))-1)
如果您想将File_1.70837292036d41139fcf8fa6b4997d3c.pdf变为File_1.pdf,那么您可以尝试以下操作,但它可能看起来很糟糕:
SELECT
LEFT
(
RIGHT
(
Filepath,
CASE WHEN PATINDEX('%\%',REVERSE(Filepath)) > 0
THEN PATINDEX('%\%',REVERSE(Filepath))-1
ELSE LEN(Filepath)
END
),
CASE WHEN
PATINDEX
(
'%.%',
RIGHT
(
Filepath,
CASE WHEN PATINDEX('%\%',REVERSE(Filepath)) > 0
THEN PATINDEX('%\%',REVERSE(Filepath))-1
ELSE LEN(Filepath)
END
)
)>0
THEN
PATINDEX
(
'%.%',
RIGHT
(
Filepath,
CASE WHEN PATINDEX('%\%',REVERSE(Filepath)) > 0
THEN PATINDEX('%\%',REVERSE(Filepath))-1
ELSE LEN(Filepath)
END
)
)-1
ELSE 0 END
)
+
RIGHT
(
Filepath,
CASE WHEN PATINDEX('%.%',REVERSE(Filepath)) > 0
THEN PATINDEX('%.%',REVERSE(Filepath))
ELSE LEN(Filepath)
END
)