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