Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于日期时间的联接表_Sql_Sql Server - Fatal编程技术网

Sql 基于日期时间的联接表

Sql 基于日期时间的联接表,sql,sql-server,Sql,Sql Server,根据日期时间连接两个表 CREATE Table A (StartDate DATETIME, EndDate DATETIME, Name VARCHAR(50)) CREATE Table B (FromDate DATETIME, ToDate DATETIME, Product VARCHAR(50), Price VARCHAR(50)) INSERT INTO A values ('05/20/2014 10:00:00', '05/20/2014 14:00:00', 'S

根据日期时间连接两个表

CREATE Table A
(StartDate DATETIME, 
EndDate DATETIME,
Name VARCHAR(50))

CREATE Table B
(FromDate DATETIME, 
ToDate DATETIME,
Product VARCHAR(50),
Price VARCHAR(50))

INSERT INTO A values ('05/20/2014 10:00:00', '05/20/2014 14:00:00', 'Stalin')
INSERT INTO A values ('05/20/2014 14:02:00', '05/20/2014 18:03:00', 'Vipin')
INSERT INTO A values ('05/20/2014 18:10:00', '05/20/2014 23:04:00', 'Raju')


INSERT INTO B values ('05/20/2014 10:01:00', '05/20/2014 14:01:00', 'Pen', '20')
INSERT INTO B values ('05/20/2014 14:02:33', '05/20/2014 18:03:58', 'Pensil', '22')
INSERT INTO B values ('05/20/2014 18:11:00', '05/20/2014 23:05:00', 'Book','33')
结果应该是

StartDate           EndDate            FromDate        ToDate           Product    Price    Name
5/20/2014 10:00 | 5/20/2014 14:00 | 5/20/2014 10:01 | 5/20/2014 14:01 | Pen      |   20   | Stalin
5/20/2014 14:02 | 5/20/2014 18:03 | 5/20/2014 14:02 | 5/20/2014 18:03 | Pensil   |   22   | Vipin
5/20/2014 18:10 | 5/20/2014 23:04 | 5/20/2014 18:11 | 5/20/2014 23:05 | Book     |   33   | Raju
我正在尝试以下查询

Select A.StartDate,a.EndDate, b.FromDate, b.ToDate, b.Product,b.Price,a.Name 
from a
Join B 
ON A.StartDate BETWEEN DATEADD(MM,-2,B.FromDate) 
AND DATEADD(MM,2,B.ToDate)

结果不符合预期,有什么帮助吗?

所有日期都在两个月之内。我想你真的需要几分钟。试试这个:

Select A.StartDate,a.EndDate, b.FromDate, b.ToDate, b.Product, b.Price,a.Name
from a Join
     B
     ON A.StartDate BETWEEN DATEADD(minute,-2,B.FromDate) AND DATEADD(minute,2,B.ToDate);
是有效日期部分的列表


使用诸如
dateadd()
datepart()
之类的函数时,请使用设备的全名。没有理由使用缩写。即使您认为自己知道
MM
的意思,阅读您代码的其他人也可能不知道。

希望这就是您所寻找的

SELECT  A.StartDate,
        A.EndDate,
        B.FromDate,
        B.ToDate,
        B.Product,
        B.Price,
        A.Name
FROM    A
JOIN    B ON DATEPART(HH,A.StartDate) = DATEPART(HH,B.FromDate)
AND     CAST(A.StartDate AS DATE) = CAST(B.FromDate AS DATE)
获得的结果


他展示了预期的结果。。。他没有显示他得到了什么,认为在
DateAdd
MM
代表月份,这可能就是为什么您的查询没有按预期工作