2013-01-01 91 views
1

我在MS ACCESS 2010中遇到了一个奇怪的问题。
我有一个表RawData,列TaskDate(格式是Memo)。当我使用下面的查询我得到所需的数据,
ms access 2010年无法获得数据

`select * from RawData where TaskDate between '01/01/2012' and '12/31/2012'` 

但是当我使用下面的查询,我没有得到任何数据:

select * from RawData where TaskDate between '01/01/2012' and '01/01/2013' 

我不明白的问题,数据比较没有发生在这个“年”值上。请帮助这个

回答

0

哦,老兄。你意识到这有多糟糕?不幸的是,“不知道如何使用数据库”风格。阅读数据类型文档的时间。

好了,我们开始吧:

TaskDate(格式备注)

是的,但是确实应该公开鞭笞。首先,这是一个TEXT字段,其次是LONG文本的日期永远不会。两级失败。

如果格式是备忘录它是文本,所以“之间”比较文本。

'01/01/2012' 和'12/31/2012'`

被左到右。

即第一个字母0或1,第二个字母1或2,0和3之间第四信,1和1之间第五信那张...

'01/01/2012' 和'01/01/2013'

这基本上意味着2012年和2013年01/01的所有内容。假设这是一个假期,没有任务 - 好吧,没有数据。为什么?因为任何其他日期都失败。首字符必须匹配'01/01/201'。

如果您想要这样做呢得当,您可以:

  • 修改日期的格式是有意义的文本。这是ISO标准:2012年1月1日至2012年12月31日。这意味着他们在从左到右的顺序时是正确的。

  • 更好:转储愚蠢的主意,用备忘录的日期

http://www.dummies.com/how-to/content/tips-for-choosing-field-types-in-access-2010.html

然后使用日期/时间的字段类型,并奇迹般地访问不会尝试比较文本(它不知道它们在内部意味着什么,所以它不能将日期的语义应用于它们)并比较真正的日期。

现在你确定没有“日期”比较。它是纯粹的愚蠢的小字符串,从左到右,逐个字符,没有额外的逻辑。

+0

感谢您的帮助!我真的很陌生,所以你可能会发现我的帖子非常新手..我已经改变了格式,并使用下面的查询来获得结果....... select * from RawData其中TaskDate在#1/1之间/ 2012#和#1/1/2013#。现在得到结果 –