2016-12-20 7 views
-1

Мне нужно создать столбец формулы. В этом столбце мне нужно вернуть числовое значение.Как искать строку и возвращать только числовое значение?

Пример:

database.dbo.table1 имеет столбец под названием «сообщение», которое содержит длинное сообщение.

Сообщение отформатирован так: various words, characters, spaces <this document is> document# = 12345 <this document is>

Что мне нужно сделать, это поиск через сообщение, найти «этот документ» и обыскали между обоими из этих фраз для числового значения документа, вернуть document # внутри столбца формулы.

+3

Похоже, вы знаете, некоторые из функций, основанных на тегах '' charindex' и patindex', но у вас нет» т включал любые попытки его решения. Вы должны действительно включить некоторые из своих попыток и объяснить, почему они не работают. – Taryn

+0

@bluefeet Я действительно не знаю функций. Я искал и наткнулся на них много, но не могу понять, как правильно их использовать, чтобы решить мою проблему. Поэтому я все еще пытался что-либо, потому что я честно не знаю, с чего начать. –

+0

@ G.Colon. Вы начинаете на страницах документации Microsoft для этих функций. – dfundako

ответ

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

Спасибо. Это заставит меня начать. –