SQL:匹配包含NULL值和字符串的两列,只提取不包含NULL的匹配行

SQL: Match two columns containing NULL values and strings and extract only the matching rows without NULL

我的温度 table FileTable 如下:

  ID FileNameAct                        FileNameString
  1    NULL                             SalesOrderTarget
  2    NULL                             SalesTarget
  3 InventoryMaterialTarget_20220414.xlsx   NULL
  4 InventoryTarget_20220414.xlsx           NULL
  5 SalesOrderTarget_20220412.xlsx          NULL
  6 SalesTarget_20220412.xlsx               NULL

Objective: 匹配FileNameActFileNameString之间的字符串,取出匹配度非常接近的行。

所以结果 table 应该如下所示:

ID   FileNameAct                       FileNameString
 1  SalesOrderTarget_20220412.xlsx     SalesOrderTarget
 2  SalesTarget_20220412.xlsx          SalesTarget

我想在下面一行:

    SELECT X.* FROM (SELECT FileNameAct, FileNameString, 
    CASE WHEN ISNULL(FileNameAct,'') LIKE '%'+ ISNULL(FileNameString,'') + '%' THEN 1 ELSE 0 
    END AS Flag     
    FROM @FileTable) X
    WHERE X.Flag=1

显然,这不会给出正确的结果。

任何人都可以分享任何想法吗?

您可以使用带有条件的self-join

Select 
  b.id,
  a.FileNameAct,
  b.FileNameString
From @FileTable a
Join @FileTable b
On a.FileNameAct 
  like concat(b.FileNameString,'%')
Where b.FileNameString is not null;