sql - 在某些表达式后提取某些字符串
问题描述
我有一个表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>
我只想得到000000000075169
即TRAN ID:
我试过这个:
SUBSTRING(PrintData,CHARINDEX('TRAN ID: ',PrintData),CHARINDEX('</Li',PrintData))
但它没有给出写答案。
解决方案
您能否请教以下查询。
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)
);
推荐阅读
- logistic-regression - 逻辑模型错误:奇异矩阵,同时具有高度相关的分类虚拟对象
- linq - Linq to sql,查询多对多与其他计数
- java - 如何总结对象流的数值属性?
- r - R-markdown 不断评估评论 - 这是预期的行为吗?
- html - 无法根据 Shopify 上的库存水平更新“添加到购物车”按钮
- c - 为什么第一个for循环递减?
- sql - SQL 数据库实时同步
- java - 在片段中初始化 textView 的问题
- c# - SpotifyAPI.Web nuget 包。如何将 IPlayableItem 转换为 FullTrack?
- ruby-on-rails - “未定义的方法‘user_signed_in?’ 当 `devise_For` 缺失时