SQL - 拉取最后一个正斜杠后的所有内容

SQL - Pulling everything after last forward slash

我正在尝试将字符串拉到下面字符串中最后一个正斜杠的右侧。

/Applied Analytics/URMFG/Service Analysis/ServiceAnalysis

基本上,我希望看到 ServiceAnalysis 返回。

我遇到了以下 SQL,这与我需要的很接近,但并不准确。

=MID(K19, FIND("/",K19)+1, LEN(K19))
DECLARE @test NVARCHAR(100)
SET @test = '/Applied Analytics/URMFG/Service Analysis/ServiceAnalysis'

SELECT REVERSE(LEFT(REVERSE(@test), CHARINDEX('/', REVERSE(@test)) -1))

反转字符串并找到 /

的第一个实例

查找/

左边的字符

再次反转以获得您想要的结果

在 SQL 中,您可以这样做:

declare @string varchar(100) = '/Applied Analytics/URMFG/Service Analysis/ServiceAnalysis';

select RIGHT(@string,charindex('/',reverse(@string),1)-1)

但是,仍在等待查看您引用的是否是 EXCEL(因为它看起来像一个 EXCEL 公式)。

如果是 Excel,那么您可以使用 this post 中的 Reverse() 函数并像这样应用它:

公式如下:

=Reverse(LEFT(Reverse(A1),FIND("/",Reverse(A1),1)-1))

使用PARSENAME()函数的另一种方法

DECLARE @String NVARCHAR(100)
SET @String = '/Applied Analytics/URMFG/Service Analysis/ServiceAnalysis'

SELECT  PARSENAME(REPLACE(SUBSTRING(@String, 2, 100), '/', '.'), 1) AS [4th part],
        PARSENAME(REPLACE(SUBSTRING(@String, 2, 100), '/', '.'), 2) AS [3rd part],
        PARSENAME(REPLACE(SUBSTRING(@String, 2, 100), '/', '.'), 3) AS [2nd part],
        PARSENAME(REPLACE(SUBSTRING(@String, 2, 100), '/', '.'), 4) AS [1st part]

输出

正则表达式来拯救!您可以使用 RXReplace() 函数实现此目的:

RXReplace([column],"^/.*/(.*)$","","")

我会让你自己查找 RXReplace() 文档,但只是为了解释正则表达式本身:

^/ 匹配字符串的开头和开头的 /

.*/ 匹配接下来出现的任何字符,后跟一个 / 这是字符串末尾之前的最后一个 /(在我们要提取的位之前)

(.*)$ 匹配接下来出现的任何字符,将它们放入 "capturing group"(基本上是一个变量),然后是字符串的末尾

</code> 是一个标记,它指的是上面的捕获组(通常这在正则表达式中看起来像 <code>,但 Spotfire 有点不同)

几乎任何时候你需要处理在 Spotfire 表达式中提取字符串位,RXReplace() 就是你想要的。它比做大量的 Left()s、Right()s 和 Len()s 更具可持续性,尽管最初的努力可能会更高一些。

更多正则表达式信息位于 http://www.regular-expressions.info/

以下 SQL 声明在 T-SQL 2017 年对我有用:

SELECT RIGHT([Filename], CHARINDEX('\', REVERSE('\' + [Filename])) - 1)