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

标签 sql tsql

如果我有一个由其他字符串组成的字符串,这些字符串以“/”字符分隔 (xxx...xxx/xxx/xxxx),我怎样才能得到最后一个和几乎最后一个(最后一个)部分t-sql?它可能应该是 charindex() 和 right() 的某种组合。

最佳答案

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
    )

“最后一个”非常简单,无需解释。

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

LEFT(@s, LEN(@s) - CHARINDEX('/', REVERSE(@s)))

产生 'aaaaa/bbbbb/ccccc/ddddd'

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

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

关于sql - 如何从 T-SQL 中的 "/"分隔字符串中获取几乎最后一个子字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1248512/

相关文章:

sql - 具有多个结果集的 TSQL 查询

sql - 强制内部查询在外部查询之前执行

sql-server - 需要一个基于集合的解决方案来对行进行分组

sql-server - 如何向现有 SQL 表添加一列

sql - 创建数据库范围的凭证语法

sql - 如何将分离的 Year(int)、Month(int) 和 Day(int) 列转换为 DateTime

java - 使用最新版本时 upsert 出现语法错误

mysql - 在创建 UNIQUE 键之前如何定位重复记录?

SQL 查询日期 = 今天减去 7 天

mysql - 列组上的Where子句