Nee*_*raj 270 sql t-sql sql-server datetime sql-server-2005
我有一个start_date和end_date.我想获得这两个日期之间的日期列表.任何人都可以帮我指出我的查询中的错误.
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and Date between 2011/02/25 and 2011/02/27
Run Code Online (Sandbox Code Playgroud)
这Date是一个datetime变量.
Dee*_*pak 444
你应该将这两个日期放在单引号之间,比如..
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date between '2011/02/25' and '2011/02/27'
Run Code Online (Sandbox Code Playgroud)
或者可以使用
select Date, TotalAllowance from Calculation where EmployeeId = 1
and Date >= '2011/02/25' and Date <= '2011/02/27'
Run Code Online (Sandbox Code Playgroud)
Wel*_*gon 115
由于没有指定时间段的日期时间将具有值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'
Run Code Online (Sandbox Code Playgroud)
要么
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date < '2011/02/28'
Run Code Online (Sandbox Code Playgroud)
要么
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date >= '2011/02/25' and Date <= '2011/02/27 23:59:59.999'
Run Code Online (Sandbox Code Playgroud)
请勿使用以下内容,因为如果时间为00:00:00.000,它可能会从2011/02/28返回一些记录.
select Date,TotalAllowance from Calculation where EmployeeId=1
and Date between '2011/02/25' and '2011/02/28'
Run Code Online (Sandbox Code Playgroud)
小智 14
试试这个:
select Date,TotalAllowance from Calculation where EmployeeId=1
and [Date] between '2011/02/25' and '2011/02/27'
Run Code Online (Sandbox Code Playgroud)
日期值需要键入字符串.
为了确保您的SQL Server 2008及更高版本的查询面向未来,Date应该进行转义,因为它是更高版本中的保留字.
请记住,没有时间的日期将午夜视为默认值,因此您可能没有正确的值.
Cha*_*ash 11
select * from table_name where col_Date between '2011/02/25'
AND DATEADD(s,-1,DATEADD(d,1,'2011/02/27'))
Run Code Online (Sandbox Code Playgroud)
在这里,首先将一天添加到当前endDate 2011-02-28 00:00:00,然后再减去一秒来生成结束日期2011-02-27 23:59:59.通过这样做,您可以获得给定间隔之间的所有日期.
output:
2011/02/25
2011/02/26
2011/02/27
Run Code Online (Sandbox Code Playgroud)
这是非常古老的,但鉴于我在日期方面的很多经验,您可能需要考虑这一点:人们使用不同的区域设置,因此,某些人(以及某些数据库/计算机,取决于区域设置)可能会阅读此内容日期 11/12/2016 为 2016 年 12 月 11 日或 2016 年 11 月 12 日。此外,提供给 MySQL 数据库的 16/11/12 将在内部转换为 2016 年 11 月 12 日,而在英国区域设置计算机上运行的 Access 数据库将解释和将其存储为 2012 年 11 月 16 日。
因此,每当我要与日期和数据库进行交互时,我的政策都是明确的。所以我总是提供我的查询和编程代码如下:
SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016';
Run Code Online (Sandbox Code Playgroud)
另请注意,Access 将接受 #,因此:
SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;
Run Code Online (Sandbox Code Playgroud)
但 MS SQL 服务器不会,所以我总是使用“'”,如上所述,两个数据库都接受。
当从代码中的变量获取该日期时,我总是将结果转换为字符串,如下所示:
"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")
Run Code Online (Sandbox Code Playgroud)
我写这篇文章是因为我知道有时有些程序员可能不够敏锐,无法检测到固有的转换。日期 < 13 不会有错误,只是结果不同!
对于所问的问题,在最后一个日期上加一天,并进行如下比较:
dated >= '11 Nov 2016' AND dated < '15 Nov 2016'
Run Code Online (Sandbox Code Playgroud)
小智 5
此查询适用于获取当前日期与其后3个日期之间的值
SELECT * FROM tableName WHERE columName
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
Run Code Online (Sandbox Code Playgroud)
这最终将为当前日期添加额外3天的缓冲区.
select * from test
where CAST(AddTime as datetime) between '2013/4/4' and '2014/4/4'
Run Code Online (Sandbox Code Playgroud)
- 如果数据类型不同
尝试将日期放在 # # 之间,例如:
#2013/4/4# and #2013/4/20#
Run Code Online (Sandbox Code Playgroud)
它对我有用。
小智 5
select Date,TotalAllowance
from Calculation
where EmployeeId=1
and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27'
Run Code Online (Sandbox Code Playgroud)