首页 > 解决方案 > 在某些表达式后提取某些字符串

问题描述

我有一个表customer_info,其中一列PrintData包含许多信息。我想从该列中获取交易 ID。

列数据如下所示:

    <Line28>.TVR: 4000008000</Line28>
    <Line29>.IAD: 06020103649D00</Line29>
    <Line30>.TSI: E800</Line30>
    <Line31>.ARC: 00</Line31>
    <Line32>.CVM: PIN VERIFIED</Line32>
    <Line33>.TRAN ID: 000000000075169</Line33>

我只想得到000000000075169TRAN ID:

我试过这个:

SUBSTRING(PrintData,CHARINDEX('TRAN ID: ',PrintData),CHARINDEX('</Li',PrintData))

但它没有给出写答案。

标签: sqlsql-server

解决方案


您能否请教以下查询。

DECLARE @PrintData AS VARCHAR (200) = '<Line33>.TRAN ID: 000000000075169</Line33>';

SELECT SUBSTRING(@PrintData, 
                 CHARINDEX('TRAN ID: ', @PrintData) + LEN('TRAN ID: '), 
                 CHARINDEX('</Li',@PrintData) - (CHARINDEX('TRAN ID: ', @PrintData) + LEN('TRAN ID: '))
                 );

语法是SUBSTRING (expression, start_position, length)

更新:

根据 MarcinJ 的评论,对于 的多个实例</Line,以下查询将起作用。

DECLARE @PrintData VARCHAR(2000) = '
    <Line28>.TVR: 4000008000</Line28>
    <Line29>.IAD: 06020103649D00</Line29>
    <Line30>.TSI: E800</Line30>
    <Line31>.ARC: 00</Line31>
    <Line32>.CVM: PIN VERIFIED</Line32>
    <Line33>.TRAN ID: 000000000075169</Line33>
    ';

DECLARE @FindString AS VARCHAR (20) = 'TRAN ID: ';
DECLARE @LenFindString AS INT = LEN(@FindString);

SELECT SUBSTRING(@PrintData, 
                 CHARINDEX(@FindString, @PrintData) + @LenFindString, 
                 CHARINDEX('</Line', @PrintData, CHARINDEX(@FindString, @PrintData)) - (CHARINDEX(@FindString, @PrintData) + @LenFindString)
                 );

推荐阅读