如何从T-SQL中的"/"分隔字符串中获取几乎最后一个子字符串?

agn*_*zka 2 sql t-sql

如果我有一个字符串,其中包含用"/"字符(xxx ... xxx/xxx/xxxx)分隔的其他字符串,我怎样才能获得t-sql的最后一个和最后一个(最后一个)部分?它应该是charindex()和right()的某种组合.

Tom*_*lak 11

declare @s varchar(50);
set @s = 'aaaaa/bbbbb/ccccc/ddddd/eeeee'

/* last one: */
select
    RIGHT(@s, CHARINDEX('/', REVERSE(@s)) - 1)

/* penultimate one */
select
    RIGHT(
      LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s))), 
      CHARINDEX('/', REVERSE(
        LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s)))
      )) - 1
    )
Run Code Online (Sandbox Code Playgroud)

"最后一个"非常简单,无需解释.

"倒数第二个"基本上等于"最后一个",所有出现的@s替换为:

LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s)))
Run Code Online (Sandbox Code Playgroud)

哪个产生 'aaaaa/bbbbb/ccccc/ddddd'

要检查字符串中是否有足够的斜杠使此表达式成功,您可以这样做

CASE WHEN LEN(@s) - LEN(REPLACE(@s, '/', '')) >= 2 
     THEN /* expression here */
     ELSE /* error value here */
END
Run Code Online (Sandbox Code Playgroud)