2016-07-20 75 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 1955年不存在'

我想根據Id/Guid值前後顯示的內容對消息進行分組,因此上面的消息將分組爲3組。

我已經考慮使用Levenshtein來查找類似的字符串,但它似乎有點矯枉過正,因爲我知道所有的差異都會彼此跟隨(這也會由於需要比較的字符串數量而導致性能問題)。問題是我不知道Guid/Id開始或結束的字符串在哪裏。

+2

能否請你添加一些樣本數據,並用它 – TheGameiswar

+1

解釋沿着「問題是,我不知道在哪裏串的GUID /編號開始或結束。」我們也一樣。我們甚至不知道字符串是什麼樣子。 –

+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