Sql ID不应在指定日期之间显示?
使用SQLServer2000 数据库1.1表1Sql ID不应在指定日期之间显示?,sql,sql-server,tsql,sql-server-2000,Sql,Sql Server,Tsql,Sql Server 2000,使用SQLServer2000 数据库1.1表1 ID Name Date title 001 Ravi 23-02-2009 Accountant 001 Ravi 24-02-2009 Accountant 001 Ravi 25-02-2009 Accountant 002 Ram 21-02-2009 Supervisors 002 Ram 25-02-2009 Supervisors 002 Ram 26-02-2009 Supervisors 等等 数据
ID Name Date title
001 Ravi 23-02-2009 Accountant
001 Ravi 24-02-2009 Accountant
001 Ravi 25-02-2009 Accountant
002 Ram 21-02-2009 Supervisors
002 Ram 25-02-2009 Supervisors
002 Ram 26-02-2009 Supervisors
等等
数据库2.2表2
ID Name Date1 Date2
001 Ravi 23-02-2009 24-02-2009
002 Ram 21-02-2009 24-02-2009
等等
假设我想显示从2009年2月21日到2009年2月26日的记录-
预期产出:
001 Ravi 25-02-2009 Accountant
002 Ram 25-02-2009 Supervisors
002 Ram 26-02-2009 Supervisors
从上面两个表中,我想显示Database1.table1中的id、名称、日期和标题,其中Database1.table1.id不应显示在Database2.table2中的date1和date2之间:
(23-02-2009 to 24-02-2009) ID should not display from table1
(21-02-2009 24-02-2009) ID should not display from table1
如何在SQL中进行查询
有人能帮我吗。我想你在找这个:
select db1.id, db1.name, db1.date, db1.title
from database1.table1 as db1
join database2.table2 as db2 on db1.id = db2.id
where db1.date < db2.date1
or db1.date > db2.date2
选择db1.id、db1.name、db1.date、db1.title
从database1.table1作为db1
在db1.id=db2.id上将database2.table2作为db2连接
其中db1.datedb2.date2
-don对于表1中的每一行,我们查找表2中的行,只显示不匹配表2的行:
SELECT
TABLE1.*
FROM TABLE1
LEFT JOIN TABLE2
ON
(TABLE1.ID = TABLE2.ID) AND --JOIN TABLE2 BY ID
(TABLE1.DATE BETWEEN TABLE2.DATE1 AND TABLE2.DATE2) --AND BY DATE CRITERIA
WHERE
(TABLE2.ID IS NULL) AND --SHOW ONLY IF IT DIDN'T MATCH ROW IN TABLE2
(TABLE1.DATE BETWEEN '21-02-2009' AND '26-02-2009')
试试:
SELECT t.id,
t.name,
t.date,
t.title
FROM TABLE_1 t
WHERE NOT EXIST(SELECT NULL
FROM TABLE_2 t2
WHERE t.date BETWEEN t2.date1 AND t2.date2)
如果数据模型以字符串形式存储日期,请更新NOT EXISTS以使用CAST/CONVERT将其更改为DateTime
请注意。也许您可以向我们展示您迄今为止编写的代码?人们通常不喜欢只为您编写代码…将错误显示为“无法解决等于操作的排序规则冲突”您是否将日期存储为文本?这不是个好主意。我的SQL只是为了说明应该如何创建,但日期不应该存储在文本中。如果您将其存储在文本中,则应该对其进行更改。如果无法更改,可以使用转换函数将文本更改为日期,然后进行比较。转换(DATETIME,TABLE1.DATE,110)在转换(DATETIME,'21-02-2009',110)和转换(DATETIME,'26-02-2009',110)之间的转换(DATETIME,TABLE1.DATE,110)阅读此处有关转换的内容: