我有一個功能,在一個字符的另一個表中查找匹配的ICD-9代碼。我這樣做是因爲我們接收ICD-9代碼的格式不一致,其中許多數字在最後有額外的數字,或者他們可能在錯誤的地方有一個小數,甚至丟失。改進SQL函數搜索表匹配字符串
除了尋找部分匹配以至少找到ICD9所屬的類別之外,我們沒有別的選擇。我們不使用這個作爲計費目的,因此部分匹配是可以的。幸運的是,ICD9代碼按結構分類編號。因此,我們可以說我們收到了「淋巴肉瘤涉及腹內淋巴結的代碼」,代碼是200.13。我們可能收到代碼爲20013,20.013,200.13112等,但我可以按字符匹配代碼字符,直到找到最接近的匹配項,對於我提供的所有示例,這些匹配項都是200.13。
該函數幾乎100%正確工作,只需要很長時間才能運行,因爲必須搜索查找表4次或5次以查找最接近的匹配項,這會使函數非常慢。尤其是當它必須匹配1000條記錄的每條記錄最多12個代碼時。
關於改進查詢的任何想法?
/* Find match for an ICD9 code in LookupDiseases and selects the desciption . Return the matching
description for the ICD9 code.
*/
ALTER FUNCTION [dbo].[uf_LookupICD9Desc] (@ClaimA99 UNIQUEIDENTIFIER,@ICD9 NVARCHAR(10))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Substring NVARCHAR (10)
DECLARE @Description NVARCHAR(MAX)
DECLARE @Length INT
DECLARE @Count INT
/* Remove decimal place from string */
SET @ICD9 = REPLACE(@ICD9,'.','')
/* Get lenth of string */
SET @Length = LEN(@ICD9)
/* Initialize count */
SET @Count = 1
/* Get Substring */
SET @Substring = SUBSTRING(@ICD9,1,@Count)
/* Start processing */
IF (@Length < 1 OR @ICD9 IS NULL)
/* Validate @ICD9 */
BEGIN
SET @Description = 'No match found for ICD-9.'
END
ELSE IF ((SELECT COUNT(*) FROM LookupDiseases WHERE REPLACE(LookupCodeDesc,'.','') LIKE @Substring + '%') < 1)
/* Check for at least one match */
BEGIN
SET @Description = 'No match found for ICD-9.'
END
ELSE
/* Look for matching code */
BEGIN
WHILE ((SELECT COUNT(*) FROM LookupDiseases WHERE REPLACE(LookupCodeDesc,'.','') LIKE @Substring + '%') <> 1 AND (@Count < @Length + 1))
BEGIN
/* Update substring value */
SET @Substring = SUBSTRING(@ICD9,1,@Count + 1)
/* Increment @Count */
SET @Count += 1
/* Select the first matching code and get description */
SELECT TOP(1) @Description = LookupName FROM LookupDiseases WHERE REPLACE(LookupCodeDesc,'.','') LIKE @Substring + '%' ORDER BY LookupCodeDesc ASC
END
END
/* Return the ICD9 code description. */
RETURN(@Description)
END
有誰知道爲什麼SQL代碼在發佈時無法正確顯示?我正在從SSMS粘貼它。 – Matt 2011-05-17 14:57:33
我想你應該在所有代碼行中加上4個空格。 – xs0 2011-05-17 14:58:17
你的問題是什麼?另外,我沒有看到如何刪除ICD9代碼的小數位數,它們對於確定數值非常重要。你能提供你的輸入和輸出的例子嗎? – Beth 2011-05-17 15:00:56