试图在SQL Server中找到部分匹配的字符串



我有一个SQL Server数据库,有重复的记录与略有不同的文件名。如果存在重复,则文件名的一部分将与之匹配,因此使用了crazy substring函数。我正试图写一个查询来查找和排除重复的记录,但我不确定我是否在正确的轨道上。

我试图匹配的示例-文件名的粗体部分。我无法找到以'。csv . csv '结尾的记录,因为并非所有这些记录都是重复的。最后,我希望从报表中排除重复项:

125648FILENAME_2021-01-011. csv

876765FILENAME_2021-01-01.CSV1.CSV

到目前为止我写的是:

SELECT 
f.fileName, f.Date,
(SELECT 
COUNT(CASE 
WHEN f.fileName LIKE '%LEFT(SUBSTRING(f.fileName,8,len(f.fileName)),len(SUBSTRING(f.fileName,8,len(f.fileName)))-3)%' 
THEN 1 ELSE 0 END)) 'Count of Duplicates'
FROM 
database f
GROUP BY 
f.fileName, f.Date
ORDER BY 
'Count of Duplicates' DESC;

我在想我可以计数重复,以知道所讨论的文件有一个匹配,但可能有一个更好的方法。我也试过使用HAVING f.fileName LIKE '%LEFT(SUBSTRING(f.fileName,38,len(f.fileName)),len(SUBSTRING(f.fileName,38,len(f.fileName)))-3)%' > 1.

如果您的所有记录模式都像样本一样,(文件名的期望部分从第八个索引开始)

;WITH xQ
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY f.fileName,f.[DATE]) AS Id,
SUBSTRING(f.fileName,8,PATINDEX('%.%',f.fileName)-8) AS C
FROM @database F
)
SELECT *
FROM
(
SELECT C,
(SELECT COUNT(1) 
FROM xQ 
WHERE
xQ.Id <> MainQ.Id 
AND xQ.C LIKE '%'+MainQ.C+'%') AS DuplicateCount 
FROM xQ AS MainQ
) AS FinalQ
WHERE DuplicateCount>0

相关内容

  • 没有找到相关文章