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/