我有一个start_date
和end_date
。我想要得到这两个日期之间的日期列表。有人可以帮我指出查询中的错误吗?
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
这里的Date
是一个datetime
变量。
我有一个start_date
和end_date
。我想要得到这两个日期之间的日期列表。有人可以帮我指出查询中的错误吗?
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
这里的Date
是一个datetime
变量。
你应该像这样用单引号将这两个日期括起来...
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date between '2011/02/25' and '2011/02/27'
或者可以使用
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date >= '2011/02/25' and Date <= '2011/02/27'
请记住,第一个日期是包含的,但第二个日期是不包含的,因为它实际上是“2011/02/27 00:00:00”
between
应该可以按预期工作。 - timctran如果没有指定时间段,日期时间将会有一个值为date 00:00:00.000
。所以,如果你想确保在你的范围内获取所有的日期,你必须为结束日期提供时间或者增加结束日期,使用<
符号。
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between '2011/02/25' and '2011/02/27 23:59:59.999'
或者
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date < '2011/02/28'
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'
请勿使用以下代码,因为它可能会返回2011/02/28的记录,假如它们的时间是00:00:00.000。
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between '2011/02/25' and '2011/02/28'
convert(date, Date) between '2011/02/25' and '2011/02/27'
(至少在最近的MS SQL Server中)。 convert()
部分将负责剥离时间部分,然后between比较将按预期工作。 - senseiDate >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'
或者between版本,这两种方式都是错误的,会返回值为'2011-02-28T00:00:00'
的记录。也不要过于倾向于使用魔法时间23:59.59.997
,虽然它更可靠,但仅适用于datetime列。Datetime2可以具有更高的精度,因此这种比较并不是你想要进入的习惯。相反,请使用Date >= '2011-02-25T00:00:00' and Date < '2011-02-28T00:00:00'
,这种方法没有任何缺点。 - Richard Abey-Nesbit试试这个:
select Date,TotalAllowance from Calculation where EmployeeId=1
and [Date] between '2011/02/25' and '2011/02/27'
日期值需要以字符串形式输入。
为确保您的查询在 SQL Server 2008 及更高版本中具有未来可用性,应该转义日期
,因为它是稍后版本中的保留字。
请注意,没有时间的日期会将午夜作为默认值,因此您可能无法获得正确的值。
select * from table_name where col_Date between '2011/02/25'
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))
在这里,首先需要将当前的endDate增加一天,得到的值是2011-02-28 00:00:00
,然后你再减去一秒钟,将结束日期变成2011-02-27 23:59:59
。这样做可以获取给定时间区间内的所有日期。
output:
2011/02/25
2011/02/26
2011/02/27
select * from test
where CAST(AddTime as datetime) between '2013/4/4' and '2014/4/4'
-- 如果数据类型不同
SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016';
SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;
但是MS SQL服务器不行,所以我总是像上面那样使用“ '”,这两个数据库都可以接受。
当从代码中的变量获取该日期时,我总是将结果转换为字符串,如下所示:
"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")
dated >= '11 Nov 2016' AND dated < '15 Nov 2016'
这个查询用于获取当前日期和其后三个日期之间的值。
SELECT * FROM tableName WHERE columName
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'
尝试在# #之间输入日期,例如:
#2013/4/4# and #2013/4/20#
这对我很有帮助。
SELECT CITY, COUNT(EID) OCCURENCES FROM EMP
WHERE DOB BETWEEN '31-JAN-1900' AND '31-JAN-2900'
GROUP BY CITY
HAVING COUNT(EID) > 2;
此查询将查找城市中出现次数超过2次并且出生日期在指定时间范围内的员工。