ms access 2010在每年给出条件时没有获取数据

时间:2013-01-01 10:12:42

标签: date ms-access-2010

我对MS ACCESS 2010有一个奇怪的问题 我有一个表RawData与列TaskDate(格式为备注)。当我使用以下查询时,我得到了所需的数据,

`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'

我不明白这个问题,因为这个'Year'值没有发生数据比较。请帮助解决这个问题

1 个答案:

答案 0 :(得分:0)

哦伙计。你意识到这有多糟糕?遗憾的是,“不知道如何使用数据库”的风格。是时候阅读有关数据类型的文档了。

好的,我们走了:

  

TaskDate(格式为备忘录)

是的,然而这应该被公开鞭打。首先,这是一个TEXT字段,第二个是LONG文本,它们的日期永远不会。在两个级别上失败。

如果格式为Memo,则为文本,因此“between”比较文本。

  

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

从左到右。

即。第一个字母0或1,第二个字母1或2,第4个字母在0和3之间,第5个字母在1和1之间。继续......

  

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

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

如果你想这样做,你可以:

  • 将日期格式更改为文本。这是ISO规范:2012-01-01至2012-12-31。这意味着他们从左到右顺序排列。

  • 更好:将愚蠢的想法转移到日期使用备忘录

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

然后使用日期/时间作为字段类型,并且神奇地Access不会尝试比较文本(它们不知道它们在内部的含义,因此它不能将日期的语义应用于它们)并比较实际日期。 / p>

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