我需要获取在多个相同符号中找到的最后一次出现的符号。
SELECT Charindex('|', 'abc||xyz')
这将导致 4,但我需要获取最后一个'|'的索引 这是 5 的索引。然后根据该索引对字符串进行子串。
编辑:对不起,我之前的问题错了。我忘了提到字符串可能包含更多数量的字符和符号。
如果字符串'abc||xyz',@forpas 答案是正确的。
但是如果字符串是 'abc||xyz|||qwe' 就会出错
编辑 2:基本上我想在循环字符串时对包含分隔符的字符串进行子串。
Declare
@txt as nvarcar(max),
@newTxt as nvarchar(50)
SET @txt = 'dog|cat|||fish|horse||||frog'
--while looping
--1st loop:
@newTxt = 'dog|'
@txt = 'cat|||fish|horse||||frog'
--2nd loop:
@newTxt = 'cat|||'
@txt = 'fish|horse||||frog'
--3rd loop:
@newTxt = 'fish|'
@txt = 'horse||||frog'
...
UPDATE最初的问题是关于在给定字符串中查找索引。但是由于信息不足导致多次更新,另一个答案与新问题冲突。在第二版之后,我正在做的整个过程突然被接受的答案完成了。因此,问题的标题和一些上下文已更新,以便此线程有用。
您可以使用此 SplitString 函数来获取值列表及其找到的索引并使其适应您的目的....
CREATE FUNCTION [dbo].[fn_SplitString2]
(
@string NVARCHAR(MAX),
@delimiter CHAR(1)
)
RETURNS @output TABLE(id int not null primary key identity, splitdata NVARCHAR(MAX), startindex int)
BEGIN
DECLARE @start INT, @end INT
SELECT @start = 1, @end = CHARINDEX(@delimiter, @string)
WHILE @start < LEN(@string) + 1 BEGIN
IF @end = 0
SET @end = LEN(@string) + 1
INSERT INTO @output (splitdata, startindex)
VALUES(SUBSTRING(@string, @start, @end - @start), @start)
SET @start = @end + 1
SET @end = CHARINDEX(@delimiter, @string, @start)
END
RETURN
END
DECLARE @st VARCHAR(100) = 'dog|cat|||fish|horse||||frog';
SELECT *
FROM [dbo].[fn_SplitString2](@st, '|') A
WHERE splitdata <> ''
输出:
id splitdata startindex
1 狗 1
2 猫 5
5 鱼 11
6马16
10 青蛙 25
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句