2

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

select * from employees where joindate between '2013-05-01' and '2013-05-01'

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

MySQL 曾经提供在'2013-05-01'加入的员工的记录。T-SQL 在哪里提供在'2013-04-30'加入的员工的记录

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

有没有解决这个问题的方法。请让我知道。

谢谢,dpchimmili。

4

2 回答 2

2

MySQL used to give the records of employees who joined on '2013-05-01'. Where as T-SQL is giving the records of employees who joined on '2013-04-30'

这就是不同的服务器如何以不同的方式实现 between 函数:因为 MySQL 包括所有日期之间和具有相同日期的日期,所以 T-sql 仅包括这些日期between的日期而不包括日期本身。

使用 Where 语句作为解决方法WHERE joindate >='2013-05-01' and joindate <= '2013-05-01'或 jsutWHERE joindate ='2013-05-01'

于 2013-05-01T07:19:43.650 回答
2

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

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')

一个用于测试的 SQLfiddle

于 2013-05-01T07:31:03.610 回答