拆分字符串并取最后一个元素

Ant*_*apa 31 sql sql-server url split

我有一个包含这个值的表:

Articles/Search/ArtMID/2681/ArticleID/2218/Diet.aspx
OurStory/MeettheFoodieandtheMD.aspx
TheFood/OurMenu.aspx
Run Code Online (Sandbox Code Playgroud)

我想得到这个

Diet.aspx
MeettheFoodieandtheMD.aspx
OurMenu.aspx
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

jaz*_*ato 48

在SQL中执行此操作的方法:

SELECT SUBSTRING( string , LEN(string) -  CHARINDEX('/',REVERSE(string)) + 2  , LEN(string)  ) FROM SAMPLE;
Run Code Online (Sandbox Code Playgroud)

JSFiddle http://sqlfiddle.com/#!3/41ead/11

  • 也许不适用于上下文中的问题,但通常来说,此解决方案不适用于具有以下条件的条目:1)单个令牌(无分隔符)。在这种情况下,我们期望单个值。2)单字符令牌。 (2认同)

Joh*_*Woo 10

SELECT REVERSE(LEFT(REVERSE(columnName), CHARINDEX('/', REVERSE(columnName)) - 1))
FROM   tableName
Run Code Online (Sandbox Code Playgroud)

ORHER SOURCE(s)


小智 10

尝试这个。更容易了。

SELECT RIGHT(string, CHARINDEX('/', REVERSE(string)) -1) FROM TableName
Run Code Online (Sandbox Code Playgroud)


Tec*_*hDo 5

请试试:

select url,(CASE WHEN CHARINDEX('/', url, 1)=0 THEN url ELSE RIGHT(url, CHARINDEX('/', REVERSE(url)) - 1) END)
from(
    select 'Articles/Search/ArtMID/2681/ArticleID/2218/Diet.aspx' as url union
    select 'OurStory/MeettheFoodieandtheMD.aspx' as url union
    select 'MeettheFoodieandtheMD.aspx' as url
)xx
Run Code Online (Sandbox Code Playgroud)

  • 这确实有效。处理 NULL、单标记(无分隔符),甚至长度为 1 或 0 个字符。 (2认同)

小智 5

SELECT REVERSE ((
    SELECT TOP 1 value FROM STRING_SPLIT(REVERSE('Articles/Search/ArtMID/2681/ArticleID/2218/Diet.aspx'), '/')
)) AS fName
Result: Diet.aspx
Run Code Online (Sandbox Code Playgroud)

标准STRING_SPLIT不允许取最后一个值。

诀窍是REVERSE在用 拆分之前反转字符串 ( ) STRING_SPLIT,从末尾获取第一个值 (TOP 1 value ),然后需要再次反转结果 ( REVERSE) 以恢复原始字符序列。

这是使用 SQL 表时的常用方法:

SELECT REVERSE ((
    SELECT TOP 1 VALUE FROM STRING_SPLIT(REVERSE(mySearchString), '/')
)) AS myLastValue
FROM myTable 
Run Code Online (Sandbox Code Playgroud)


小智 5

一种稍微更紧凑的方法(类似于 ktaria 的答案,但在 SQL Server 中)是

SELECT TOP 1 REVERSE(value) FROM STRING_SPLIT(REVERSE(fullPath), '/') AS fileName
Run Code Online (Sandbox Code Playgroud)