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

Posted

技术标签:

【中文标题】ID不应在指定日期之间显示?【英文标题】:ID should not display between the specified date? 【发布时间】:2009-10-03 15:38:26 【问题描述】:

使用 SQL Server 2000

数据库1.Table1

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.Table2

ID  Name Date1      Date2    
001 Ravi 23-02-2009 24-02-2009 
002 Ram  21-02-2009 24-02-2009

等等……

假设我想显示从 21-02-2009 到 26-02-2009 的记录 - 预期输出:

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 中进行查询?

谁能帮帮我。

【问题讨论】:

或许您可以向我们展示您目前编写的代码?人们通常不喜欢只为您编写代码...... 【参考方案1】:

对于 Table1 中的每一行,我们在 Table2 中查找行并仅显示与 Table2 不匹配的行:

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') 

【讨论】:

显示错误为“无法解决等于操作的排序规则冲突” 您是否将日期存储为文本?这不是个好主意。我的 SQL 只是为了展示它应该如何制作,但日期不应该存储在文本中。如果您将其存储在文本中,则应该更改它。如果无法更改,可以使用 CONVERT 函数将文本更改为日期,然后进行比较。 CONVERT(DATETIME,TABLE1.DATE,110) 在 CONVERT(DATETIME,'21-02-2009',110) 和 CONVERT(DATETIME,'26-02-2009',110) 之间阅读关于转换:msdn.microsoft.com/en-us/library/ms187928.aspx跨度> 【参考方案2】:

试试:

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...

注意LEFT JOIN/IS NULL is not as efficient as NOT IN/NOT EXISTS in SQL Server。

【讨论】:

【参考方案3】:

认为你正在寻找这个:

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

-不要

【讨论】:

以上是关于ID不应在指定日期之间显示?的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL SPQR:id 不应在创建时显示

不应在其焦点上显示软键盘的 Xamarin.Forms 条目

Play Framework:如何在 CRUD 模型中声明不应在 UI 中显示的成员

(gin框架拓展)两种 HTTP 请求方法:GET 和 POST

如何使计数器在指定日期不断增加到某个数字?

如何设置开始日期和结束日期之间的验证应在 3 年内选择