SQL 从已知字符串中查询 select 两个子字符串

A SQL Query to select two substrings from a known string

我需要一个 SQL 查询从一个主字符串中获取两个字符串,返回值以 T#######@@###@@#### 开头。主串长度变化

示例:

主串

@code=025121710TestPASS*68242850AD*68242382AF*1UJ97DX9AF*68248793AB*68236772AB*56054275AG*NoPN*1UW38DX9ACNoPNT00BE161571394 *T8LQI141529458*NoPNNoPNNoPN*NoPN

捕获的第一个子字符串

T00BE161571394 

捕获的第二个子字符串

T8LQI141529458

到目前为止我已经想到了这个,但无济于事:

捕获的第一个子字符串

SELECT left(RIGHT(code, 51), 15)

捕获的第二个子字符串

SELECT left(RIGHT(code, 35), 15)

有人可以帮助我吗?我不确定如何正确计算长度并以正确的顺序分隔子字符串。

我猜你可以用[*]分隔。反转字符串并拆分

declare @string1 nvarchar(250)
declare @string2 nvarchar(250)

declare @myString nvarchar(500)= '025121710TestPASS*68242850AD*68242382AF*1UJ97DX9AF*68248793AB*68236772AB*56054275AG*NoPN*1UW38DX9ACNoPNT00BE161571394 *T8LQI141529458*NoPNNoPNNoPN*NoPN'
set @myString = REVERSE(@myString)
DECLARE @StartPos int, @Length int

select @StartPos = CHARINDEX('*', @myString)
set @myString = SUBSTRING(@myString,(@StartPos+1),len(@myString)-@StartPos)
select @StartPos = CHARINDEX('*', @myString)
set @myString = SUBSTRING(@myString,(@StartPos+1),len(@myString)-@StartPos)


select @StartPos = CHARINDEX('*', @myString)
select @string1 = SUBSTRING(@myString,0,@StartPos)
set @myString = SUBSTRING(@myString,(@StartPos+1),len(@myString)-@StartPos)

select @StartPos = CHARINDEX('*', @myString)
select @string2 = SUBSTRING(@myString,0,16)
select REVERSE(@string1) ,REVERSE(@string2)

试试这个,这将 select 完整的主字符串中的子字符串列表

declare @myString nvarchar(500)= '025121710TestPASS*68242850AD*68242382AF*1UJ97DX9AF*68248793AB*68236772AB*56054275AG*NoPN*1UW38DX9ACNoPNT00BE161571394 *T8LQI141529458*NoPNNoPNNoPN*NoPN'

;with T(ind,pos) as (
    select charindex('T', @myString), 1
    union all
    select charindex('T', substring(@myString,ind+1,len(@myString)))+ind,pos+1
    from t
    where pos > 0 and ind <> charindex('T', substring(@myString,ind+1,len(@myString)))+ind
)
select substring(@myString,ind,14) as YourString from t where substring(@myString,ind,14) NOT LIKE '%[^a-zA-Z0-9]%'