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: 匹配FileNameAct
和FileNameString
之间的字符串,取出匹配度非常接近的行。
所以结果 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;
我的温度 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: 匹配FileNameAct
和FileNameString
之间的字符串,取出匹配度非常接近的行。
所以结果 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;