sql-server - 两个日期时间字段之间的 SQL Server,无法正常工作

标签 sql-server between

SQL 服务器 2005:

下图

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/01/2011' And '03/31/2011')  
ORDER BY KeyedDate

给出了关键日期 3/2/2011 到 3/31/2011 的结果。

如果我将第一个日期更改为 03/00/2011

  SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
    FROM TMSSTATFILE_STATS a                                                                
   WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/00/2011' And '03/31/2011')  
ORDER BY KeyedDate

它现在提供日期为 3/1/2011 到 3/31/2011 的数据

KeyedTimestamp 字段是 DateTime 并且有与这些记录关联的时间。 2011 年 3 月 31 日的所有记录均已说明。我知道我可以通过在中间的第二个日期提供最长时间来做到这一点,所以我不是在寻找替代的 where 子句,而是了解为什么它忽略了第一个记录,即使它合并了这些记录从 31 日开始。

它几乎就像是在检查 2011 年 3 月 1 日 23:59:59,我希望我可以消除这种我只关心日期而不关心时间的检查

最佳答案

通过不使用 BETWEEN 来避免列上的函数。函数意味着永远不会使用任何索引

WHERE
    a.KeyedTimestamp >= '20110301' AND a.KeyedTimestamp < '20110401'  

pre-SQL Server 2008 yyyymmdd唯一安全的日期格式。

关于sql-server - 两个日期时间字段之间的 SQL Server,无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5939954/

相关文章:

sql-server - SQL Server 2005 - 有没有办法在事务中锁定 SELECT?

sql - 如何在 SQL Server 2008 中将格式为 "property:value,property2:value"的字符串转换为 xml

MySQL 使用日期函数和最小最大之间选择日期

mysql - 使用 mysql 进行日期重叠以进行预订

sql-server - MDF 和 LDF 文件大小

sql-server - SQL 查询的 ColdFusion 单引号问题

sql - 从最后插入的行中选择 id

MySQL:在日期 dd.mm.yyyy hh.mm.ss 之间选择

sql - 优化 Oracle Between Date 语句

mysql - 创建特定月份内的付款 list 。数据库管理系统