2016-07-28 2 views
0

У меня есть строка, которую я должен анализировать и извлекать поля идентификатора счета. Моя строка может иметь либо один идентификатор счета, либо несколько идентификаторов счета.SQL-синтаксический разбор и получение определенного значения

Declare @str nvarchar(1000) 

set @Str = 'Process of submitting the bill id: AS12345 is send back to Customer. Bill id:WE23456 and Bill id: AS12345 came from customers' 

Declare @t table (billid varchar(100)) 
Insert into @t values ('AS12345'),('WE23456'),('AS12345') 

select distinct billid from @t 
+0

что вы хотите сделать с этим? –

+0

Мне нужно выбрать идентификатор счета из строки. – goofyui

+0

Я даже не видел никаких проблем с вашим кодом .. его работа прекрасна и возвращает счет ... –

ответ

1

С помощью функции Parser.

Declare @str nvarchar(1000) 
set @Str = 'Process of submitting the bill id: AS12345 is send back to Customer. Bill id:WE23456 and Bill id: AS12345 came from customers' 

-- Clean and Normalize String 
Set @Str = Replace(Replace(Replace(@Str,'Bill id','BILLID'),'BILLID :','BILLID:'),'BILLID: ','BILLID:') 
Select Distinct BillID=Replace(Key_Value,'BILLID:','') 
From [dbo].[udf-Str-Parse](@Str,' ') 
Where Key_Value Like 'BILLID%' 

Возвращает

BillID 
AS12345 
WE23456 

ОДС

ALTER FUNCTION [dbo].[udf-Str-Parse] (@String varchar(max),@Delimeter varchar(10)) 
--Usage: Select * from [dbo].[udf-Str-Parse]('Dog,Cat,House,Car',',') 
--  Select * from [dbo].[udf-Str-Parse]('John Cappelletti was here',' ') 
--  Select * from [dbo].[udf-Str-Parse]('id26,id46|id658,id967','|') 
--  Select * from [dbo].[udf-Str-Parse]('hello world. It. is. . raining.today','.') 

    Returns @ReturnTable Table (Key_PS int IDENTITY(1,1), Key_Value varchar(max)) 
    As 
    Begin 
     Declare @XML xml;Set @XML = Cast('<x>' + Replace(@String,@Delimeter,'</x><x>')+'</x>' as XML) 
     Insert Into @ReturnTable Select Key_Value = ltrim(rtrim(String.value('.', 'varchar(max)'))) FROM @XML.nodes('x') as T(String) 
     Return 
    End 
+0

Спасибо, Джон, я думал, что системные функции, такие как Stuff, могут обрабатывать разбор – goofyui

+0

@goofyui I 'll лапшу это немного больше, Возможно, есть более элегантный способ –

+0

Большое вам спасибо! Оно работает !! – goofyui

0

Я думаю, что пользовательская функция используется с регулярным выражением id:\s*[A-Z][A-Z][0-9]+.

+0

ключевое слово, чтобы отфильтровать заявление, является идентификатором счета: – goofyui

Смежные вопросы