@ConfListTable是一个表值参数(TVP),它有一个确认码列表。 我想从PmtHist表中选择所有记录,其中确认码也在@ConfListTable中。以下代码适用于此;没问题。
Select * from PmtHist
Where Confirmation in(
Select Str1 as ConfirmationCode
From @ConfListTable
)
我的问题是:PmtHist中的确认码偶尔会在实际确认码后“无效”。像“ab321voided”但我真的想要那些记录。如何修改上述查询以获取与@ConfListTable中的记录匹配或匹配@ConfListTable +'无效'的记录?
答案 0 :(得分:3)
快速&简单的方法是简单地使用REPLACE:
Select *
from PmtHist
Where REPLACE(Confirmation, 'voided', '') in(
Select Str1 as ConfirmationCode
From @ConfListTable
)
答案 1 :(得分:1)
select *
from PmtHist ph
where exists (
select 1 from @ConfListTable
where ph.Confirmation in (Str1, Str1 + 'voided')
)
答案 2 :(得分:1)
为了获得更好的性能,我建议使用两个单独的查询
SELECT *
FROM dbo.PmtHist t1
WHERE t1.Confirmation IN (SELECT t2.Str1 FROM @ConfListTable t2)
UNION ALL
SELECT *
FROM dbo.PmtHist t1
WHERE t1.Confirmation IN (SELECT t2.Str1 + 'voided' FROM @ConfListTable t2)
请参阅SQLFiddle
答案 3 :(得分:0)
添加“不在其中”:
Select * from PmtHist
Where Confirmation in(
Select Str1 as ConfirmationCode
From @ConfListTable
)
and Confirmation not in(
<some list of voided confirmation
)