首页 > 解决方案 > SQL查询选择两个日期之间的日期并排除两个日期之间的日期

问题描述

CREATE TABLE [dbo].[#temp1]
(
    [workDate] [datetime] NULL,
    [Id] [int] NULL,
) ON [PRIMARY]

INSERT INTO [dbo].[#temp1] 
VALUES ('12-01-2018', '11'), ('11-01-2018', '11'),
       ('10-01-2018', '11'), ('09-01-2018', '11')


CREATE TABLE [dbo].[#temp2]
(
    [workDate] [datetime] NULL,
    [Id] [int] NULL,
) ON [PRIMARY]

INSERT INTO [dbo].[#temp2] 
VALUES ('10-01-2018', '11'), ('09-01-2018', '11')

我有 2 张带日期的桌子。

我想选择所有日期,#temp1但不计算#temp2.

我用过,但没有得到想要的结果:

select A.workDate, A.Id
from [dbo].[#temp1] A
left join [dbo].[#temp2] B on A.Id = B.Id and A.workDate = B.workDate
where A.workDate between CAST('09.01.2018' as datetime) and CAST('12.01.2018' as datetime)
   or B.workDate not between CAST('09.01.2018' as datetime) and CAST('10.01.2018' as datetime)

我想得到的结果:

workDate                   Id
-------------------------------
2018-01-12 00:00:00.000    11
2018-01-11 00:00:00.000    11

如何解决?

标签: sqlsql-serverbetween

解决方案


您编写查询的方式取决于表中的值。如果您已经知道要选择的日期,则可以这样做:

where A.workDate between CAST('11.01.2018' as datetime) and CAST('12.01.2018' as datetime)

相反,您可能想要的是选择left join不匹配任何内容的行:

where B.workDate is null

推荐阅读