首页 > 解决方案 > 使用子字符串/字符索引

问题描述

我必须从我们数据库中的“不干净”字段中提取文本。有人知道如何仅从以下示例中提取: “日常使用量太高”吗?

Order: T001.1<br />Rejection Reason: Meter Read Rejected: daily usage too high<br /><br /><a href='http://********?ProfileId=111111&AccountId=22222&ProductId=11111&MeterId=11111'>Link to page</a>

另一个例子:

<b>Order: </b>Notification<br /><b>Rejection Reason: </b>Meter Read Rejected: daily usage too high<br /><br /><br /><a href='http://********ProfileId=11111&AccountId=11111&ContractId=1111&WaterId=2222&MeterId=22222&MOT=true'>Meter page</a>

标签: sql-servertsqlsubstring

解决方案


我假设您想找到第 3 次出现:<br>

如果是这样,您可以使用Stuffwith cross apply。这里cross apply需要找到第 3 次出现:

SELECT 
SUBSTRING(STUFF(texi, 1, CHARINDEX(':',texi,P3.pos), ''), 0, 
          CHARINDEX('<', STUFF(texi, 1, CHARINDEX(':',texi,P3.pos), ''))) as mystring
from test
cross apply (select (CHARINDEX(':',texi))) as P1(Pos)
cross apply (select (CHARINDEX(':',texi, P1.Pos+1))) as P2(Pos)
cross apply (select (CHARINDEX(':',texi, P2.Pos+1))) as P3(Pos)

在这里查看演示


推荐阅读