和之间在MySql中工作正常,但在T-SQL中工作不正常

和之间在MySql中工作正常,但在T-SQL中工作不正常,mysql,tsql,Mysql,Tsql,我们有一个后端MySQL项目,我们最近将其迁移到SQLServer2005。 当使用MySQL时,下面给出的查询可以正常工作,因为它会给出意外的结果 从joindate介于“2013-05-01”和“2013-05-01”之间的员工中选择* 这里的开始日期和结束日期是相同的 MySQL用于提供在“2013-05-01”加入的员工的记录。 其中,as T-SQL提供了在“2013-04-30”加入的员工的记录 表中的joindate列也有时间部分,我们在其中记录员工加入的确切时间和日期 有解决这个

我们有一个后端MySQL项目,我们最近将其迁移到SQLServer2005。 当使用MySQL时,下面给出的查询可以正常工作,因为它会给出意外的结果

从joindate介于“2013-05-01”和“2013-05-01”之间的员工中选择*

这里的开始日期和结束日期是相同的

MySQL用于提供在“2013-05-01”加入的员工的记录。 其中,as T-SQL提供了在“2013-04-30”加入的员工的记录

表中的joindate列也有时间部分,我们在其中记录员工加入的确切时间和日期

有解决这个问题的办法吗。请善意地告诉我

谢谢,
dpchimmili.

MySQL用于提供在“2013-05-01”加入的员工的记录。其中,as T-SQL提供了在“2013-04-30”加入的员工的记录。

这就是不同的服务器如何以不同的方式实现between功能:因为mySQL包含所有日期之间和具有相同日期的日期,所以T-sql只包含这些日期之间的日期,而不包括日期本身


使用Where语句作为解决方法,其中joindate>='2013-05-01'和joindate
MySQL用于提供在'2013-05-01'加入的员工的记录。其中,as T-SQL提供了在“2013-04-30”加入的员工的记录。

这就是不同的服务器如何以不同的方式实现between功能:因为mySQL包含所有日期之间和具有相同日期的日期,所以T-sql只包含这些日期之间的日期,而不包括日期本身


使用Where语句作为解决方法,其中joindate>='2013-05-01'和joindate如果您只是将值转换为
日期,则可以使用TSQL的
BETWEEN

select * from employees 
where CONVERT(DATE, joindate) 
between '2013-05-01' and '2013-05-01'
更好的方法是检查日期是否小于下一个日期,因为这样可以避免每行计算,并且可以更好地命中索引

select * from employees 
where joindate>='2013-05-01' 
  and joindate<DATEADD(day,1,'2013-05-01')
从员工中选择*
其中joindate>='2013-05-01'

和joindate如果您只是将值强制转换为
DATE
,则可以将
BETWEEN
与TSQL一起使用

select * from employees 
where CONVERT(DATE, joindate) 
between '2013-05-01' and '2013-05-01'
更好的方法是检查日期是否小于下一个日期,因为这样可以避免每行计算,并且可以更好地命中索引

select * from employees 
where joindate>='2013-05-01' 
  and joindate<DATEADD(day,1,'2013-05-01')
从员工中选择*
其中joindate>='2013-05-01'

然后微软就会违反SQL标准。因为标准要求
介于
运算符之间,以包含限制。但是SQL Server对它的评估是正确的:我认为这也行不通,因为
joindate
似乎是
DATETIME
,而
2013-05-01
只比较等于
2013-05-01 00:00:00
,而不是当天的任何时间。那么微软就会违反SQL标准。因为标准要求
BETWEEN
运算符包含限制。但是SQL Server对它的评估是正确的:我认为这也行不通,因为
joindate
似乎是
DATETIME
,而
2013-05-01
只比较等于
2013-05-01 00:00:00
,而不是当天的任何时间。可能是DATETIME格式问题。您可以向mssql发送日期时间,如“2013年5月1日”。可能是日期时间格式问题。您可以向mssql发送datetime,如“2013年5月1日”。OP已指定他们使用的是SQL Server 2005,而SQL Server 2005没有日期类型。因此,第一个建议对他们不起作用。在第二个示例中,它可能应该是
joindate>='2013-05-01'
,而不是
joindate>'2013-05-01'
。除此之外,我同意。@AndriyM感谢您提醒我键入的
。OP已指定他们使用的是SQL Server 2005,而SQL Server 2005没有
日期类型。因此,第一个建议对他们不起作用。在第二个示例中,它可能应该是
joindate>='2013-05-01'
,而不是
joindate>'2013-05-01'
。除此之外,我同意。@AndriyM谢谢你提醒我输入的