Moh*_*oth 2 sql-server between
SQL Server 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
Run Code Online (Sandbox Code Playgroud)
截止日期为2011年3月2日至2011年3月31日.
如果我将第一个日期更改为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
Run Code Online (Sandbox Code Playgroud)
它现在提供2011年3月1日至2011年3月31日的数据
KeyedTimestamp字段是DateTime,并且有时间与这些记录相关联.2011年3月31日的所有记录都已计算在内.我知道我可以通过在第二个日期之间提供最大时间来实现这一点,所以我不是在寻找替代where子句,而是要理解为什么它忽略了第一个的记录,即使它合并了从31日开始.
它几乎就像它在3月1日23:59:59检查,我希望我可以消除这种检查,我只关心日期,而不是时间
不使用BETWEEN避免在列上使用函数.函数意味着永远不会使用任何索引
WHERE
a.KeyedTimestamp >= '20110301' AND a.KeyedTimestamp < '20110401'
Run Code Online (Sandbox Code Playgroud)
并且SQL Server 2008之前的yyyymmdd是唯一安全的日期格式.