在最后一个'/'之后获取所有内容

时间:2019-09-25 15:12:53

标签: sql sql-server string

我的TBL_Documents表中有一条这样的路径:

Uploads/Documents/6093/12/695-Graco-SW_5-15-19.pdf

我需要将其与正在上传的文件进行比较,该文件看起来像这样:

695-Graco-SW_5-15-19.pdf

我想将表中的路径与上传的文件名进行比较。我尝试在第一个substring()的右上角使用/,但是我并没有真正了解子字符串的工作原理。例如,我尝试这样做:

select substring(right(path,1),1,1) as path from TBL_DOCUMENT 

但这只是从右边开始给我的第一个字符。我希望能看到最后/个字符之后的所有内容。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我将使用一种方法来从右边查找需要使用多少个字符。我将通过首先反转字符串然后搜索“ /”来做到这一点。这将从右边告诉您多少个字符。然后,我将在tail函数中使用它:

SQL Fiddle

MS SQL Server 2017架构设置

查询1

RIGHT

Results

DECLARE @documentName varchar(100) = 'Uploads/Documents/6093/12/695-Graco-SW_5-15-19.pdf'

SELECT RIGHT(@documentName, CHARINDEX('/',REVERSE(@documentName))-1)

答案 1 :(得分:0)

RIGHT(path,1)表示您需要路径字符串右边的[1]字符或'f'。 然后,将'f'包裹在子字符串中,要求从字符串的第[1]个位置开始输入[1]个字符。由于传递给子字符串的表达式返回'f',因此您的子字符串也返回'f'。

您想使用charindex和reverse的组合来适当地处理它。 SUBSTRING(path,len(path) - charindex('/',reverse(path)))。那不会解析,但是应该可以让您走上正确的轨道。

通常来说,这将从路径的最右边的“ /”开始到字符串的结尾返回字符串。