介于两者之间并且在MySql中工作正常但在T-SQL中没有

时间:2013-05-01 07:11:17

标签: mysql tsql

我们有一个带有后端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。

2 个答案:

答案 0 :(得分: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'

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

使用Where语句解决WHERE joindate >='2013-05-01' and joindate <= '2013-05-01'或jsut WHERE joindate ='2013-05-01'

答案 1 :(得分:2)

如果您只是将值转换为BETWEEN,则可以将DATE与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')

An SQLfiddle to test with