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.start
和 table1.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 查询的主要内容,如果未能解决你的问题,请参考以下文章