Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 ID不应在指定日期之间显示?_Sql_Sql Server_Tsql_Sql Server 2000 - Fatal编程技术网

Sql ID不应在指定日期之间显示?

Sql 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 等等 数据

使用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
等等

数据库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)阅读此处有关转换的内容: