SQL NOT BETWEEN 查询

Posted

技术标签:

【中文标题】SQL NOT BETWEEN 查询【英文标题】:SQL NOT BETWEEN query 【发布时间】:2011-02-24 15:09:03 【问题描述】:

提前感谢您的任何建议或提示!

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

一个例子;

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

但是我无法让它工作!有什么建议吗?

【问题讨论】:

table1 到 table2 的链接在哪里?我认为 where 子句需要一个条件将 table1 链接到 table2,例如 WHERE ('2011-02-24 18:00:00' NOT BETWEEN table1.start AND table1.finish) AND (table1.testfield = table2.testfield ) 我假设 table2 有不止一行。您想将其中哪一个与 table1.testfield 进行比较? (很可能 table1.testfield 将在某些开始日期和结束日期之间,而不是在其他一些开始和结束日期之间。) 【参考方案1】:

这应该可以,但看起来应该更像

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)

编辑看着你的问题,我意识到日期可能不是数据库值:) 所以你的方法应该可以工作,但你可能需要将字符串转换为日期时间。

【讨论】:

没错,我的日期将是一个不存储在数据库中的不断变化的变量。我的方法有效,但仅适用于 table1 中的第一行,其中包含多个预订条目。感谢您的回复【参考方案2】:

然后是这样的吗?

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

【讨论】:

以上是关于SQL NOT BETWEEN 查询的主要内容,如果未能解决你的问题,请参考以下文章

sql [sql技巧]一些sql技巧#sql

sql 2008 r2 在sql 2008上兼容么

pl sql developer怎么执行sql

pl sql developer怎么执行sql

什么是sql注入如何防止sql注入

sql SQL Server和Oracle SQL的SQL语法的一些示例