我需要创建一个公式列。在本专栏中,我需要返回一个数值。
示例:
database.dbo.table1有一个名为" message"的列。包含长信息。
邮件的格式如下:various words, characters, spaces <this document is> document# = 12345 <this document is>
我需要做的是搜索邮件,找到&#34;这个文件是&#34;并在这两个短语之间搜索文档的数值,在公式列中返回文档#。
答案 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);