我正在使用这些陈述
DECLARE @FirstDayofPrevMonth datetime
SET @FirstDayofPrevMonth = DATEADD(mm, DATEDIFF(m,0,GETDATE())-1,0)
DECLARE @LastDayofPrevMonth datetime
SET @LastDayofPrevMonth = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
然后在where子句中使用它们:
WHERE FNDate >= @FirstDayofPrevMonth AND FNDate <= @LastDayofPrevMonth
使用“Between”的原因是什么?
答案 0 :(得分:4)
BETWEEN
实际上与>=
和<=
完全相同。
请注意,尽管键入较少,但可能会导致错误的结果。
很多时候,您希望在一个日期内获得结果。你会写:
WHERE DateTimeField BETWEEN '20140918' AND '20140919'
在这种情况下,假设表中有以下条目:
1 '20140918 23:59:59'
2 '20140919 00:00:00'
3 '20140919 00:00:01'
上面的where
语句会获得条目1和2.因此,虽然在大多数情况下您会得到正确的结果,但使用以下内容更安全:< / p>
WHERE DateTimeField >='20140918' AND DateTimeField < '20140919'
答案 1 :(得分:2)
如果您显示的是绝对没有理由使用BETWEEN
:这两个表达式在功能上是等效的。
BETWEEN
的一个好例子是左边的值是评估表达式或参数引用的结果,例如
WHERE @AsOfDate BETWEEN t.ActiveFrom AND t.ActiveTo
或
WHERE DATEADD(day, t.DaysToDeliver, t.OrderDate) BETWEEN @BlackoutBegin AND @BlackoutEnd
此处,等效的>=
和<=
对需要重复WHERE
子句的一部分,这与BETWEEN
运算符不同。
答案 2 :(得分:2)
没有什么区别,只有那个可以被认为更容易阅读。
例如,人们可以争辩说:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
比以下更容易阅读:
SELECT column_name(s)
FROM table_name
WHERE column_name >=value1 AND column_name <=value2;
否则,没有太大的区别。当然,除了更多的打字(感谢杰克);)
有些人仍然不同意,尽管他们不喜欢&#39; BETWEEN&#39;条款,因为日期/等等有时会很棘手。但是,与所有代码一样,它的设计是出于某种原因。而且,如果使用得当,可能会非常有帮助!
有些人会日夜争辩说他们会使用AND条款 - 这可能只是让他们更频繁地了解/使用它,并且已经习惯了它的小小的&#39;调整和扭曲&#39; - 因此他们没有尽可能多地使用BETWEEN声明。
但是,如果他们首先使用BETWEEN语句(在他们知道AND语句是什么之前),那么他们就会有不同的争论。
但是,与所有代码一样,请充分利用它,并且您将学会使用它 - 甚至可能会想到&#39;我之前是如何使用它的。
修改强>
显然有些人在谈论&#39;是否包含/排除&#39;,我想我可能会添加这个(从我下面的评论中复制):少打字可能并不总是新手的答案,但是知道他们正在做什么的人,这可能会非常有帮助! (我不是任何一个职业选手) - 但对我而言,这意味着排他性。但是,是的,我知道人们来自哪里,例如选择1到10之间的数字。英语中的整个单词有一些含糊不清!
如果您想阅读更多内容,可以在blog帖子中谈论&#34;糟糕的习惯:错误处理日期/范围查询&#34; 。
This对&#34;了解如何使用SQL BETWEEN条件及语法和示例进行了一些解释&#34;
就个人而言,我更愿意保留使用 Between 语句,比如说,员工ID,其中值是ints / etc,而不是日期(这纯粹是首选,如两者都可以“使用”。
答案 3 :(得分:2)
和之间的关键字与&lt; =或&gt; = 没有区别。他们会给出相同的结果。 但两者之间只是为了可读的目的,也不要重复列名。
select * from table_name where column_name between '2014-01-01' and '2014-01-31';
select * from table_name where column_name>='2014-01-01' and date<='2014-01-31';
您可以在上面的查询中看到它们会给出相同的结果,但之间的是可读格式。
答案 4 :(得分:0)
我记得,没有区别。但请亲自看看:
SELECT * FROM `table` WHERE `date` BETWEEN 12917700 AND 12917300
and:
SELECT * FROM `table` WHERE `date` >= 12917700 AND `date` <= 12917300
产生相同的结果。