SQL NOT BETWEEN 查询

8

非常感谢您提供的任何建议或技巧!

我有一个名为table1的MySQL数据库中的预订表。它包含一个开始日期和结束日期。 我还有另一个表table2,其中包含我需要获取的信息,但只有当特定日期不在table1中的任何行的日期之间时才能获取。

例如:

select table2.testfield
FROM table2, table1
WHERE '2011-02-24 18:00:00'
NOT BETWEEN table1.start 
AND table1.finish

然而我无法让它工作!有什么建议吗?

表1到表2的链接在哪里?我认为where子句需要一个条件来将表1与表2链接起来,例如WHERE('2011-02-24 18:00:00' NOT BETWEEN table1.start AND table1.finish)AND(table1.testfield = table2.testfield)。 - BielsasBucket
我假设table2有多行数据。你想将它们中的哪一行与table1.testfield进行比较?(很可能table1.testfield会在某些开始和结束日期之间,而不是在其他开始和结束日期之间。) - Mike Sherrill 'Cat Recall'
2个回答

14

这应该能够工作,但看起来应该更像

select table2.testfield
FROM table2, table1
WHERE table1.YourField = '2011-02-24 18:00:00' 
AND
NOT BETWEEN table1.start AND table1.finish

这还假定你的 table1.starttable1.finish 字段都是 DateTime 类型。如果不是,你可以尝试强制转换这些字段。

select table2.testfield
    FROM table2, table1
    WHERE table1.YourField = '2011-02-24 18:00:00' 
    AND
    NOT BETWEEN Cast(table1.start as DateTime) AND Cast(table1.finish As DateTime)

编辑 看了你的问题后我意识到这个日期可能不是来自数据库值 :) 所以你的方法应该是可行的,但你可能需要将字符串转换为datetime类型。


没错,我的日期将是一个不断变化的变量,不存储在数据库中。我的方法有效,但仅适用于表1中的第一行,其中包含多个预订条目。感谢回复。 - steve

3
像这样吗?
select table2.testfield
FROM table2, table1
WHERE 
   table1.start > convert(datetime,'2011-02-24 18:00:00')
   or table1.finish < convert(datetime,'2011-02-24 18:00:00')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接