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

时间:2016-12-20 19:29:36

标签: sql sql-server tsql charindex patindex

我需要创建一个公式列。在本专栏中,我需要返回一个数值。

示例:

database.dbo.table1有一个名为" message"的列。包含长信息。

邮件的格式如下:various words, characters, spaces <this document is> document# = 12345 <this document is>

我需要做的是搜索邮件,找到&#34;这个文件是&#34;并在这两个短语之间搜索文档的数值,在公式列中返回文档#。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用SQLXML XQuery函数/方法(例如doc.value()通常很昂贵,应尽可能避免使用。在这种情况下,根据提供的信息,您可以使用CHARINDEX获得所需内容。 / p>

如果您正在使用(n)varchar字段,则可以执行此操作:

.as-console-wrapper { max-height: 100% !important; top: 0; }

如果您正在使用XML字段,则可以执行此操作:

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);