Answers:
您应该将这两个日期放在单引号之间,例如。
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”
由于没有指定时间段的日期时间将具有值,因此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'
请勿使用以下内容,因为如果它们的时间为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'
'2011/02/28 00:00:00.000'
怎么了?
convert(date, Date) between '2011/02/25' and '2011/02/27'
(至少与最新的MS SQL Server一起使用)。该convert()
部分将负责剥离时间部分,并且之间的比较将按预期进行。
尝试这个:
select Date,TotalAllowance from Calculation where EmployeeId=1
and [Date] between '2011/02/25' and '2011/02/27'
日期值需要以字符串形式输入。
为了确保您的SQL Server 2008及更高版本的查询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
,然后将其减去一秒钟作为结束日期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'
-如果数据类型不同
该查询非常适合于获取当前日期与其后3个日期之间的值
SELECT * FROM tableName WHERE columName
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
最终,这将为当前日期增加3天的缓冲时间。
这很老,但是考虑到我在约会方面的许多经验,您可能要考虑一下:人们使用不同的区域设置,因此,某些人(以及某些数据库/计算机,取决于区域设置)可能会阅读此内容。日期为2016年11月11日,即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';
另请注意,Access将接受#,因此:
SELECT FirstName FROM Students WHERE DoB >= #11 Dec 2016#;
但是MS SQL Server不会,所以我总是像上面那样使用“”,这两个数据库都接受。
从代码中的变量获取日期时,我总是将结果转换为字符串,如下所示:
"SELECT FirstName FROM Students WHERE DoB >= " & myDate.ToString("d MMM yyyy")
我写这篇文章是因为我知道有时候有些程序员可能并不热衷于检测固有的转换。日期<13不会有错误,只是结果不同!
对于所提问题,将最后一天添加一天,并进行如下比较:
dated >= '11 Nov 2016' AND dated < '15 Nov 2016'
尝试将日期放在##之间,例如:
#2013/4/4# and #2013/4/20#
它为我工作。
如果它的日期是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 Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND CURDATE()
最佳查询当前日期和未来三天之间的选择日期:
select Date,TotalAllowance from Calculation where EmployeeId=1 and Date BETWEEN
CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 DAY)
检查以下示例:工作和不工作。
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**
下面的AND不起作用:
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#;
为了获得最准确的结果,实际上所有sql日期都应采用yyyy-MM-dd格式。
/****** Script for SelectTopNRows command from SSMS ******/
SELECT TOP 10 [Id]
,[Id_parvandeh]
,[FirstName]
,[LastName]
,[RegDate]
,[Gilder]
,[Nationality]
,[Educ]
,[PhoneNumber]
,[DueInMashhad]
,[EzdevajDate]
,[MarriageStatus]
,[Gender]
,[Photo]
,[ModifiedOn]
,[CreatorIp]
From
[dbo].[Socials] where educ >= 3 or EzdevajDate >= '1992/03/31' and EzdevajDate <= '2019/03/09' and MarriageStatus = 1
最好这样写:
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');