-- simular parámetros con fechas de inicio y fin.
declare @fechaInicio date = '2014-05-05';
declare @fechaFin date = '2014-05-06';
select * from tbl
where campoFecha >= @fechaInicio
and campoFecha < dateadd(day, 1, @fechaFin);
更多解释...
如果该列campofecha具有时间分量,则显然过滤器具有:
where campoFecha between '2014-05-05' and '2014-05-06'
... 是不正确的,因为它相当于:
where campoFecha >= '2014-05-05'
and campofecha <= '2014-05-06'
...这将排除日期,如2014-05-06 12:00:00.
确实,您可以按照接受的答案中的建议表达条件:
where campoFecha between '2014-05-05' and '2014-05-06 23:59:59'
SELECT *
FROM tabla
WHERE CampoFecha
BETWEEN '2011/02/25' AND '2011/02/27'
SELECT *
FROM tabla
WHERE CampoFecha >= '2011/02/25'
AND CampoFecha <= '2011/02/27'
使用运算符
between
。如果您需要将日期作为文字传递给 SQL,请使用根据YYYYMMDD
我的经验始终有效的格式,无论 SQL Server 服务器和客户端设置为何种语言/文化,简而言之,查看第一学期的数据2016 年,查询将类似于:如果字段是 DateTime 类型,您可能希望包含时间信息,在这种情况下,继续使用文字的示例,您可以使用格式
YYYYMMDD HH24:MM:SS
,例如:建议尽可能将日期值作为参数传递,但最终语法将取决于您的编程语言的数据连接层的能力。
就个人而言,我一直用于这种类型的查询的模式,如果你的数据库中的日期有时间组件,那么它处理得很好,如下所示:
更多解释...
如果该列
campofecha
具有时间分量,则显然过滤器具有:... 是不正确的,因为它相当于:
...这将排除日期,如
2014-05-06 12:00:00
.确实,您可以按照接受的答案中的建议表达条件:
...但一方面,这对我来说似乎不是很干净。另一方面,根据您定义参数的位置,您必须定义时间组件可能有点奇怪,并且根据您使用的类型可能无法这样做。
但更重要的是,理论上这种条件也是有缺陷的。例如,在 SQL Server 中,该类型
datetime
还可以包括小数秒。因此,尽管不太可能,但您可能有一个2014-05-06 23:59:59.500
被查询排除的日期。正是出于这个原因,我更喜欢对开始日期使用包含条件,对结束日期使用排除条件:
这要准确得多,而且不会失败。唯一的缺点是它没有使用
between
许多人似乎喜欢的运算符。但在这方面,我留下了一篇文章的链接,该链接指向 Aaron Bertrand 所写的一篇文章,他是一位公认的 SQL Server 大师,他认为在
between
这些类型的情况下使用 是危险的:BETWEEN 和魔鬼有什么共同点?.我会通过以下方式做到这一点:
这是理想的,因为在正常使用中,您不会直接在表格中输入日期,而是通过应用程序将它们格式化为日期,并使用最适合您的掩码(YYMMDD、DD-MM-YYYY 等) . )
在这种情况下使用 WHERE(如另一个答案中所述)是无效的,因为已经存在 BETWEEN。