📜  sql server last split string - SQL (1)

📅  最后修改于: 2023-12-03 15:05:17.394000             🧑  作者: Mango

SQL Server最后一个分割字符串

在SQL Server中,将一个字符串分割成多个子串是一个常见的操作。然而,通常我们只需要获取最后一个子串。本文将介绍如何在SQL Server中获取最后一个分割的字符串。

方法一:使用REVERSE和CHARINDEX函数

使用 REVERSE 函数可以翻转字符串,这样我们就能够方便地使用CHARINDEX函数获取最后一个分割的位置。

DECLARE @str VARCHAR(50) = 'A,B,C,D,E';
DECLARE @delimiter CHAR = ',';

SELECT REVERSE(LEFT(REVERSE(@str), CHARINDEX(@delimiter, REVERSE(@str))-1)) AS LastSplitString;

解释:首先,使用REVERSE函数翻转字符串。然后,在翻转后的字符串中使用CHARINDEX函数查找最后一个分割位置。最后,使用LEFT函数截取最后一个分割字符串,并再次使用REVERSE函数翻转回来。

结果:

| LastSplitString | | :-------------: | | E |

方法二:使用SUBSTRING和REVERSE函数

另一种方法是使用SUBSTRING函数和REVERSE函数,根据逆序的子串位置以及字符串长度,计算出最后一个分割的位置。

DECLARE @str VARCHAR(50) = 'A,B,C,D,E';
DECLARE @delimiter CHAR = ',';

SELECT REVERSE(SUBSTRING(REVERSE(@str), 1, CHARINDEX(@delimiter, REVERSE(@str))-1)) AS LastSplitString;

结果:

| LastSplitString | | :-------------: | | E |

方法三:使用XML PATH

SQL Server中的XML PATH函数可以将行数据转换为XML格式,同时使用STUFF和FOR XML PATH两个函数就可以实现最后一个分割字符串查询。

DECLARE @str VARCHAR(50) = 'A,B,C,D,E';
DECLARE @delimiter CHAR = ',';

SELECT STUFF(
    (SELECT @delimiter + value 
     FROM STRING_SPLIT(@str, @delimiter)
     FOR XML PATH('')), 1, 1, '') LastSplitString;

解释:首先使用STRING_SPLIT函数拆分字符串,然后将拆分得到的子串用XML格式连接起来。最后使用STUFF函数截取除最后一个分割字符串外的字符串,即为最后一个分割字符串。

结果:

| LastSplitString | | :-------------: | | E |

以上三种方法都可以用于获取SQL Server中的最后一个分割字符串。根据实际情况,选择合适的方法即可。