如何选择(其他表)中的位置,但需要修改

时间:2013-08-23 10:30:00

标签: sql tsql

@ConfListTable是一个表值参数(TVP),它有一个确认码列表。 我想从PmtHist表中选择所有记录,其中确认码也在@ConfListTable中。以下代码适用于此;没问题。

Select * from PmtHist
Where Confirmation in(
    Select Str1 as ConfirmationCode
    From @ConfListTable
    )

我的问题是:PmtHist中的确认码偶尔会在实际确认码后“无效”。像“ab321voided”但我真的想要那些记录。如何修改上述查询以获取与@ConfListTable中的记录匹配或匹配@ConfListTable +'无效'的记录?

4 个答案:

答案 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
    )