如何为此特定过滤过程编写T-SQL语法?

时间:2015-07-27 14:06:01

标签: sql-server filter where sql-like

我正在使用SQL Server 2014,我有一个查询,它连接3个表用于特定输出。其中一个表(称为ResStayDate)的摘录如下所示:

ResID       StayDate      PlanCode
152        2015-08-02      COAI
152        2015-08-03      COAI
152        2015-08-04      COAI
296        2015-09-10      GBHB
296        2015-09-11      COHB
296        2015-09-12      GBHB
315        2015-09-23      FRBB
315        2015-09-24      FRBB
400        2015-10-02      CORB
400        2015-10-03      CORB
400        2015-10-04      CORB

“真实”表格有超过500,000行。我需要在查询中添加一个过滤器,以便它排除所有StayDates的PlanDode以'CO'开头的所有ResId,但包括那些'COR'作为PlanCode的ResID。

换句话说,我希望我的查询输出ResID 296(因为它的所有StayDates都不以CO开头),315和400。

输出:

ResID       StayDate      PlanCode
296        2015-09-10      GBHB
296        2015-09-11      COHB
296        2015-09-12      GBHB
315        2015-09-23      FRBB
315        2015-09-24      FRBB
400        2015-10-02      CORB
400        2015-10-03      CORB
400        2015-10-04      CORB

我的查询如下,需要修改:

SELECT ResID, StayDate, PlanCode

FROM ResStayDate

WHERE PlanCode not like 'CO%'

但是,上述代码行也将不包括ResID 296和400。

注意:我没有在这里显示完整的查询(带有连接);我只需要理解这个特定过滤过程背后的逻辑,我会相应地修改以适合我的查询。

3 个答案:

答案 0 :(得分:1)

SELECT ResID, StayDate, PlanCode
FROM ResStayDate
WHERE (
    PlanCode not like 'CO%'
    OR PlanCode like 'COR%'
)

答案 1 :(得分:0)

你尝试过这样的事吗?

SELECT ResID, StayDate, PlanCode
FROM ResStayDate
WHERE PlanCode not like 'CO%'
UNION ALL
SELECT ResID, StayDate, PlanCode
FROM ResStayDate
WHERE PlanCode like 'COR%'

这意味着第一个查询将提取代码不以CO开头的所有记录,第二个查询将提取代码以COR开头的记录。

答案 2 :(得分:0)

可能不喜欢CO [A-QS-Z]%'将工作。但是一直无法测试它。