如何搜索字符串且 return 只有数值?
How to search a string and return only numeric value?
我需要创建一个公式列。在本专栏中,我需要 return 一个数值。
示例:
database.dbo.table1 有一个名为 "message" 的列,其中包含一条长消息。
邮件格式如下:various words, characters, spaces <this document is> document# = 12345 <this document is>
我需要做的是搜索邮件,找到 "this document is" 并在这两个短语之间搜索文档的数值,return 公式列中的文档 #。
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 functions/methods (例如 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);
我需要创建一个公式列。在本专栏中,我需要 return 一个数值。
示例:
database.dbo.table1 有一个名为 "message" 的列,其中包含一条长消息。
邮件格式如下:various words, characters, spaces <this document is> document# = 12345 <this document is>
我需要做的是搜索邮件,找到 "this document is" 并在这两个短语之间搜索文档的数值,return 公式列中的文档 #。
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 functions/methods (例如 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);