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)
我正在尝试将字符串拉到下面字符串中最后一个正斜杠的右侧。
/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)