我正在使用 SQL Server 2000 中的 T-SQL,并且我有一个表TRANSACTIONS
,其中包含一个定义为 DateTime 的日期列TRANDATE
,以及与此问题无关的许多其他列。
该表填充了跨越多年的事务。我遇到了代码,测试,这让我很困惑。有一个简单的SELECT
,像这样:
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010' and '12/31/2010' ORDER BY TRANDATE
并且它没有返回我知道该表中的两行数据。
使用上面的语句,它返回的最后一行按顺序具有TRANDATE
:2010-12-31 00:00:00.000
当我像下面这样修改语句时,我得到了该表中 2010 年 12 月的另外两行:
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010 00:00:00' and '12/31/2010 23:59:59' ORDER BY TRANDATE
我试图找出为什么BETWEEN
操作员在使用上面的第一个时不包括 2010 年 12 月 31 日 24 期间的所有行SELECT
。为什么它需要SELECT
像在第二个已修改的语句中那样将明确的小时数添加到语句中,以使其提取正确数量的行?
是不是因为方式TRANDATE
被定义为“ DATETIME
”?
基于这一发现,我认为将不得不遍历所有这些旧代码,因为这些BETWEEN
操作符在这个旧系统中到处都是,而且似乎它没有正确提取所有数据。我只是想先从一些人那里得到澄清。谢谢!