如何在 T-SQL 中获取可变大小的 nvarchar 的最后一部分?

How to get last part of nvarchar with variable size in T-SQL?

假设我的 nvarchar 变量中有以下值:

DECLARE @txt nvarchar(255)
SET @txt = '32|foo|foo2|123'

在这种情况下,有没有办法轻松获取最后一个 | 之后的最后一部分,即 123

我可以编写一个 split 函数,但我对此字符串的第一部分不感兴趣。有没有另一种方法可以在不获取字符串的第一部分的情况下获取字符串的最后一部分?

请注意,我的字符串的所有部分都具有可变大小。

您可以为此使用 LEFT, REVERSE and CHARINDEX 的组合。 下面的查询反转字符串,找到第一次出现的 |,去掉其他字符,然后将字符串拉直。

DECLARE @txt nvarchar(255)
SET @txt = '32|foo|foo2|123'

SELECT REVERSE(LEFT(REVERSE(@txt),CHARINDEX('|',REVERSE(@txt))-1))

输出

123

编辑

如果您的字符串只有 4 个部分或更少,并且 . 不是有效字符,您也可以为此使用 PARSENAME

DECLARE @txt nvarchar(255)
SET @txt = '32|foo|foo2|123'
SELECT PARSENAME(REPLACE(@txt,'|','.'),1)

您可以反转字符串以获得所需的结果:

DECLARE @txt nvarchar(255) = '32|foo|foo2|123'
SELECT REVERSE(SUBSTRING(REVERSE(@txt), 1, CHARINDEX('|', REVERSE(@txt)) -1))