如何搜索字符串并仅返回数字值



我需要创建一个公式列。在此列中,我需要返回数字值。

示例:

database.dbo.table1有一个名为"消息"的列,其中包含一个长消息。

该消息的格式为:various words, characters, spaces <this document is> document# = 12345 <this document is>

我需要做的是搜索消息,查找"此文档",并在这两个短语之间搜索文档的数值,返回公式列中的文档#。

declare @mytab table (doc xml)    
insert into @mytab values ('<SendDocument DocumentID="1234567">true</SendDocument>')
select      doc.value('(//@DocumentID)[1]','int')
from        @mytab

如果不是保存为XML,而是Varchar

declare @mytab table (doc varchar(max))    
insert into @mytab values ('<SendDocument DocumentID="1234567">true</SendDocument>')
select      cast (doc as xml).value('(//@DocumentID)[1]','int')
from        @mytab

使用sqlxml xquery函数/方法(例如,doc.value()通常很昂贵,应在可能的情况下避免。在这种情况下,基于提供的信息,您可以获得所需的东西使用charindex。

如果您正在使用(n)varchar字段,则可以这样做:

declare @mytab table (doc varchar(max))    
insert into @mytab values ('<SendDocument DocumentID="1234567">true</SendDocument>');
SELECT SUBSTRING(ci,1,CHARINDEX('"',ci)-1)
FROM (SELECT SUBSTRING(doc, CHARINDEX('DocumentID="',doc)+12,20) FROM @mytab) start(ci);

如果您正在使用XML字段,则可以这样做:

declare @mytab table (doc xml); 
insert into @mytab values ('<SendDocument DocumentID="1234567">true</SendDocument>');
SELECT SUBSTRING(ci,1,CHARINDEX('"',ci)-1)
FROM 
(
  SELECT SUBSTRING
    (
      CAST(doc AS varchar(max)), 
      CHARINDEX('DocumentID="', CAST(doc AS varchar(max)))+12,
      20
    )
  FROM @mytab
) start(ci);

相关内容

  • 没有找到相关文章

最新更新