2016-07-28 16 views
0

私は解析して請求IDフィールドを取得する文字列を持っています。私の文字列は、請求書IDまたは複数の請求IDを持つことができます。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

私は文字列から請求書IDを選択する必要があります。 – goofyui

+0

あなたのコードに問題があるのを見たこともありません。その罰金を返して、billidを返します。 –

答えて

1

パーサー機能の助けを借りて。

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 

UDF

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

ありがとうジョン、私はスタッフのようなシステム機能が解析できると思った – goofyui

+0

@goofyui Iもう少しそれを麺にするよ、もっとエレガントな方法があるかもしれない。 –

+0

ありがとう!できます !! – goofyui

0

正規表現id:\s*[A-Z][A-Z][0-9]+を使用してカスタム機能と思います。

+0

キーワードは請求書IDです: – goofyui