Ms access 选择所选天数内的报表MS Access

Ms access 选择所选天数内的报表MS Access,ms-access,Ms Access,我要一张有datetime列的桌子 让我们将其命名为TmStamp,数据为01/01/2001 01:00:PM 还有另一个日期列,我们用数据01/01/2001将其命名为RegDate 我想选择具有该日期的数据 所以我写 SELECT * FROM TABLE WHERE RegDate>=#01/01/2001# and RegDate<=#01/01/2001# 我得到了2001年1月1日的数据 但是, SELECT * FROM TABLE WHERE TmStamp &g

我要一张有datetime列的桌子

让我们将其命名为TmStamp,数据为01/01/2001 01:00:PM

还有另一个日期列,我们用数据01/01/2001将其命名为RegDate

我想选择具有该日期的数据

所以我写

SELECT * FROM TABLE WHERE RegDate>=#01/01/2001# and RegDate<=#01/01/2001#
我得到了2001年1月1日的数据

但是,

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <=#01/01/2001#
我什么也得不到

我将获得2001年1月1日的数据,如果我喜欢的话

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <=#02/01/2001#
日期为DD/MM/YYYY格式


知道为什么吗?

我不知道MS Access中日期的内部格式,但讨论的内容是相同的,无论是像Excel一样的浮点值还是像Unix日期一样的整数。 假设它们被表示为整数,秒数

RegDate是一个数字,xxx

TMP放大器将为xxx+13*3600

2001年1月1日与xxx号相同。 2001年1月2日是xxx+24*3600


将TmpStamp与日期进行比较不会将其值截断为日期,即xxx。

在MS Access中,日期/时间字段始终具有时间分量。RegData字段的时间为00:00:00,因此Access不会向您显示它,以下查询将起作用

SELECT * FROM TABLE WHERE RegDate>=#01/01/2001# and RegDate<=#01/01/2001#
您的第一个TmStamp查询实际上正在运行

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001 00:00:00# and TmStamp <=#01/01/2001 00:00:00#
由于TmStamp字段有次,因此不会显示任何结果

对于时间不是00:00:00的日期/时间字段,需要执行的操作是运行此查询

SELECT * FROM TABLE WHERE TmStamp >=#01/01/2001# and TmStamp <#02/01/2001#

Access中的查询必须使用US date或明确的格式,如ANSI/ISO。首选yyyy/mm/dd格式。这就是说,如果您在查询设计窗口中构建查询,您就有了更多的自由度,因为访问权限将为您更改日期格式。在这件事上,时间成分是虚无的。日期都存储为数字,因此即使日期显示为dd/mm/yyyy,SQL也应为:

SELECT * FROM TABLE WHERE TmStamp >=#2001/01/01# and TmStamp <=#2001/01/02#

看起来TmStamp有一个时间组件。TmStamp和RegDate是日期/时间格式。问题是日期格式,而不是时间戳。这是我们这些不在美国时间格式语言环境中的人的标准问题。实际上与格式无关,因为我已经解决了格式问题。所以我所做的是。。我从TmStamp获取日期并将其更改为整数。然后我查一下。。那不是一种方式,但是。。它起作用了。。至少现在。。所以我认为时间部分是正确的。你不需要费劲去提取Int值。这将导致性能问题,因为它无法使用索引。虽然日期存储为浮点数,但Access非常乐意接受日期格式的输入,只要输入为US或明确的格式。微软并不吝啬到强迫你为一个简单的查询计算天数:得出@Remou在评论中所说的:你不需要使用Int来处理没有日期的日期值。你所需要做的就是他所说的,那就是格式化日期值的字符串表示形式,不管你把它们放在US格式还是明确的格式之间,比如长日期或ISO格式。使用Int将导致性能问题,因为它将无法使用日期字段上的索引。