SQL查询来select两个date之间的date

我有一个start_dateend_date 。 我想要得到这两个date之间的date列表。 任何人都可以帮我指出我的查询中的错误。

 select Date,TotalAllowance from Calculation where EmployeeId=1 and Date between 2011/02/25 and 2011/02/27 

这里Date是一个datetimevariables。

你应该把这两个date之间的单引号..

 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' 

由于没有指定时间段的date 00:00:00.000值为date 00:00:00.000 ,如果您想要确保获取范围内的所有date,则必须提供结束date或增加结束date并使用<

 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' 

请勿使用以下内容,因为如果时间是00:00:00.000,它可能会从2011/02/28返回一些logging。

 select Date,TotalAllowance from Calculation where EmployeeId=1 and Date between '2011/02/25' and '2011/02/28' 

尝试这个:

 select Date,TotalAllowance from Calculation where EmployeeId=1 and [Date] between '2011/02/25' and '2011/02/27' 

date值需要键入为string。

为确保您的SQL Server 2008及更高版本的查询符合未来要求, Date应该被转义,因为它是更高版本中的保留字。

请记住,没有时间的date以午夜为默认值,因此您可能没有正确的值。

 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 ,然后你减去一秒钟,使结束date2011-02-27 23:59:59 。 通过这样做,您可以获得给定间隔之间的所有date。

 output: 2011/02/25 2011/02/26 2011/02/27 

这个查询可以很好地获取当前date和其下3个date之间的值

 SELECT * FROM tableName WHERE columName BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY) 

这将最终为当前date添加额外的3天缓冲区。

 select * from test where CAST(AddTime as datetime) between '2013/4/4' and '2014/4/4' 

– 如果数据types不同

这是非常古老的,但是鉴于我有许多date的经验,你可能想要考虑这一点:人们使用不同的区域设置,因此,一些人(和一些数据库/计算机,取决于区域设置)可能会读这个date为2016年12月11日至2016年12月11日或2016年11月12日。甚至更多,16/11/12提供给MySQL数据库将内部转换为2016年11月12日,而在英国地区设置计算机上运行的Access数据库将解释将其存储为2012年11月16日。

因此,我决定每当我要与date和数据库进行交互时都要明确。 所以我总是提供我的查询和编程代码如下:

 SELECT FirstName FROM Students WHERE DoB >= '11 Dec 2016'; 

还要注意,Access将接受#,因此:

 SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#; 

但MS SQL服务器不会,所以我总是使用“'”,如上所述,这两个数据库接受。

当从代码中的variables获取date时,我总是将结果转换为string,如下所示:

 "SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy") 

我正在写这个,因为我知道有时候一些程序员可能不够热衷于检测固有的转换。 date<13,不会有错误,只是不同的结果!

至于提出的问题,请在最后一天添加一天,并进行如下比较:

 dated >= '11 Nov 2016' AND dated < '15 Nov 2016' 

尝试把date##例如:

 #2013/4/4# and #2013/4/20# 

它为我工作。

 select Date,TotalAllowance from Calculation where EmployeeId=1 and convert(varchar(10),Date,111) between '2011/02/25' and '2011/02/27' 

当前date和后三天之间的selectdate的最佳查询:

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND CURDATE() 

当前date和未来三天之间的selectdate的最佳查询:

  select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY) 

如果它的date在24小时内,并在早上开始,并在夜间结束应添加如下内容:

 declare @Approval_date datetime set @Approval_date =getdate() Approval_date between @Approval_date +' 00:00:00.000' and @Approval_date +' 23:59:59.999' 

检查下面的例子:工作和非工作。

 select * from tblUser Where convert(varchar(10),CreatedDate,111) between '2015/04/01' and '2016/04/01' //--**Working** 

要么

 select * from tblUser Where (CAST(CreatedDate AS DATETIME) between CAST('2015/04/01' AS DATETIME) And CAST('2016/4/30'AS DATETIME)) //--**Working** 

要么

 select * from tblUser Where (YEAR(CreatedDate) between YEAR('2015/04/01') And YEAR('2016/4/30')) //--**Working** 

和下面不工作:

 select * from tblUser Where Convert(Varchar(10),CreatedDate,111) >= Convert(Varchar(10),'01-01-2015',111) and Convert(Varchar(10),CreatedDate,111) <= Convert(Varchar(10),'31-12-2015',111) //--**Not Working** select * from tblUser Where (Convert(Varchar(10),CreatedDate,111) between Convert(Varchar(10),'01-01-2015',111) And Convert(Varchar(10),'31-12-2015',111)) //--**Not Working** 
 Select * from Calculation where EmployeeId=1 and Date between #2011/02/25# and #2011/02/27#; 

我喜欢在以下date使用“1 MonthName 2015”语法:

  WHERE aa.AuditDate>='1 September 2015' AND aa.AuditDate<='30 September 2015' 

date

我会去的

 select Date,TotalAllowance from Calculation where EmployeeId=1 and Date >= '2011/02/25' and Date < DATEADD(d, 1, '2011/02/27') 

逻辑是>=包括整个开始date和<排除结束date,所以我们增加一个单位的结束date。 这可以适应几个月,例如:

 select Date, ... from ... where Date >= $start_month_day_1 and Date < DATEADD(m, 1, $end_month_day_1) 

你可以试试这个SQL

 select * from employee where rec_date between '2017-09-01' and '2017-09-11' 

最好这样写:

 CREATE PROCEDURE dbo.Get_Data_By_Dates ( @EmployeeId INT = 1, @Start_Date DATE, @End_Date Date ) AS Select * FROM Calculation where EmployeeId=@EmployeeId AND Test_Date BETWEEN @Start_Date AND @End_Date RETURN 
 SELECT Date, TotalAllowance FROM Calculation WHERE EmployeeId = 1 AND Date BETWEEN to_date('2011/02/25','yyyy-mm-dd') AND to_date ('2011/02/27','yyyy-mm-dd');