1

我对 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'

我不明白这个问题,因为这个“年”值没有发生数据比较。请帮忙

4

1 回答 1

0

哦,伙计。你知道那有多糟糕吗?可悲的是,“不知道如何使用数据库”风格。是时候阅读有关数据类型的文档了。

好的,我们开始:

任务日期(格式为备忘录)

是的,但是那应该被公开鞭打。首先,这是一个 TEXT 字段,其次是用于日期从不存在的 LONG 文本。在两个层面上失败。

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

“2012 年 1 月 1 日”和“2012 年 12 月 31 日”`

那是从左到右。

即第一个字母 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 不会尝试比较文本(这不知道它们在内部意味着什么,因此它不能将日期的语义应用于它们)并比较真实日期。

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

于 2013-01-01T10:50:10.107 回答