我对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'值没有发生数据比较。请帮助解决这个问题
答案 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>
现在你确定没有“日期”比较。它是纯粹的愚蠢的小字符串,从左到右,逐个字符,没有额外的逻辑。