2016-07-20 5 views
0

現在、SQL Server 2014のログシステムで作業しており、同様の文字列をグループに割り当てる方法を見つける必要があります。各文字列には、接頭辞、IDまたはGUID、および接尾辞が含まれます。私はテーブル内に同じプレフィックスとサフィックスを持つ文字列がすでに存在するかどうかを見つける方法を探したいと思います。tsqlで類似の文字列を検索する

'ApsisQueue.Synchronize @ApiKey = AA24FA75-CB78-451E-A11F-39115ABF8AA1、@CallbackId = 1'

それとも

「ApsisQueueを:

典型的な文字列は次のようになります。 .Synchronize @ApiKey = AA24FA75-CB78-451E-A11F-39115ABF8AA1、LogMessageに= NULL」

または

'ApsisQueue.Synchronize @ApiKey = BC2CFC45-CB78-411E-A66F-3CC654AB125、LogMessageに= NULL'

それとも

'にファイルID は存在しません' か

'ファイルID が存在しません'

Id/Guid値の前後に表示される内容に応じてメッセージをグループ化したいので、上記のメッセージは3つのグループにグループ化されます。

私は類似した文字列を見つけるためにLevenshteinを使用することを考えましたが、すべての違いが互いに続くことを知っているので少し残忍に思えます(比較が必要な文字列のためにパフォーマンスの問題も起こります)。問題は、Guid/Idがどこで始まり、終わるかわからないということです。

+2

サンプルデータを追加してください。 – TheGameiswar

+1

「問題は、文字列内でGuid/Idが開始または終了する場所がわかりません」。私たちもそうではありません。文字列がどのように見えるのかわからない。 –

+0

ログに表示される典型的な文字列の例をいくつか追加しました – Kull

答えて

0

あなたが達成しようとしていることは本当にわかりませんが、あなたが作業しているキー値をどのように分離するかを理解すれば、前進することができます。これはサンプルデータで機能します。他のパターンがある場合、これは機能しない可能性があります。

create table #Something 
(
    SomeString varchar(200) 
) 

insert #Something (SomeString) values 
('ApsisQueue.Synchronize @ApiKey = AA24FA75-CB78-451E-A11F-39115ABF8AA1, @CallbackId = 1') 
,('ApsisQueue.Synchronize @ApiKey = AA24FA75-CB78-451E-A11F-39115ABF8AA1, LogMessage = NULL') 
,('ApsisQueue.Synchronize @ApiKey = BC2CFC45-CB78-411E-A66F-3CC654AB125, LogMessage = NULL') 
,('File id19957 does not exist') 
,('File id1955 does not exist') 


select * 
    , Case when SomeString like 'ApsisQueue%' 
     then SUBSTRING(SomeString, charindex('=', SomeString) + 2, CHARINDEX(',', SomeString) - charindex('=', SomeString) - 2) 
     else left(SUBSTRING(SomeString, 8, 200), charindex(' ', SUBSTRING(SomeString, 8, 200)) - 1) 
    end as YourKeyValue 
from #Something 

drop table #Something 
関連する問題