需要帮助来创建SQL查询where子句吗

需要帮助来创建SQL查询where子句吗,sql,sql-server,filter,where-clause,select-query,Sql,Sql Server,Filter,Where Clause,Select Query,我有一个表,其中有8列,其中2列是To&From,它们的数据类型是datetime。我想在这两个字段上执行一个带有过滤器的select查询 现在看下面的例子 Record X = From "5 May" to "18 May" Filter 1: from "5 May" to "5 May" … x should show Filter 2: from "10 May" to "10 May" … x should show Filter 3: from "1 May" to "

我有一个表,其中有8列,其中2列是To&From,它们的数据类型是datetime。我想在这两个字段上执行一个带有过滤器的select查询

现在看下面的例子

Record X = From "5 May" to  "18 May" 

Filter 1: from "5 May" to "5 May" … x should show 

Filter 2: from "10 May" to "10 May" … x should show

Filter 3: from "1 May" to "1 May" … x should NOT show

Filter 4: from "19 May" to "19 May" … x should NOT show

Filter 5: from "18 May" to "18 May" … x should show 

Filter 6: From "4 May" to  "17 May" ….  X should show

Filter 7: From "4 May" to  "18 May" ….  X should show

Filter 8: From "4 May" to  "19 May" ….  X should show

Filter 9: From "5 May" to  "17 May" ….  X should show

Filter 10: From "5 May" to  "18 May" ….  X should show

Filter 11: From "5 May" to  "19 May" ….  X should show

Filter 12: From "2 May" to  "3 May" ….  X should NOT show

Filter 13: From "20 May" to  "25 May" ….  X should NOT show
所以基本上逻辑是 如果筛选日期范围和数据库日期范围之间有任何共同的日期,则记录应显示在结果中

你能帮帮我吗?看到所有这些配置后,我感到困惑。

试试这个

Select * from table_name where startDate between '4 May' and '18 May'
And endDate between '5 May' and '19 May'
谢谢。希望这有帮助

SELECT *
FROM YourTable
WHERE from >= '5/5/2014'
  AND from < '5/6/2014'
  AND to >= '5/5/2014'
  AND to < '5/6/2014'
对过滤器1来说,这不是那么简单吗?还是需要在一个查询中使用所有筛选器

您需要from或to列位于筛选器定义的范围内,包括:

declare @filter_from datetime, @filter_to datetime

select *
from <table>
where col_from between @filter_from and @filter_to
  or col_to between @filter_from and @filter_to
  or @filter_from between col_from and col_to
  or @filter_to between vol_from and col_to

如果他处理的是日期时间戳类型。不过,你的思路是对的。你真的应该把它作为实际的表格数据,而不是这些解释列,来说明这一点。特别是考虑到您假定的数据类型。我想你也只想要一个特定的年份,是吗?我知道我在什么地方见过这些。因为你似乎在处理时间戳,我建议使用一个唯一的上限是的,他将需要一个查询的所有筛选器。特别是因为这是SQL Server,不,他不会,尽管互联网上的一些博客说,jusy是一个良性的操作员,并且非常适合这种特殊情况。实际上,在这里,BETWEEN不是一个完美的匹配,因为:1由于OP的声明类型是DATETIME,他需要做一些复杂的工作来安全地使用BETWEEN和2。提供的范围不是正确的范围。根据他的搜索条件,您的答案将错过过滤器8-检查链接副本中的答案。就我个人而言,我认为应该避免使用中间值,因为它会助长一种危险/错误的思维方式:即存在一种独特的结束值。这适用于除整数类型之外的所有类型。。。。为了保持一致性,应该避免使用日期时间。OP明确使用日期时间,没有时间部分;然而,between仅仅是'x>=a和x Hmmm的简写?呃,OP今年离开了,所以我们不知道他储存了什么。在博客中,推荐的是排他性上限