-1

数式列を作成する必要があります。この列では、数値を返す必要があります。

例:

database.dbo.table1 には、長いメッセージを含む「メッセージ」という列があります。

メッセージは次のようにフォーマットされます。various words, characters, spaces <this document is> document# = 12345 <this document is>

私がする必要があるのは、メッセージを検索し、「this document is」を見つけ、これらの両方のフレーズの間でドキュメントの数値を検索し、数式列内のドキュメント # を返すことです。

4

2 に答える 2

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
于 2016-12-20T19:58:17.563 に答える
0

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);
于 2016-12-20T21:02:20.737 に答える