2010-03-26 174 views
1

我在Access 2007数据库中有一个表。所有字段都是文本类型。使用where子句可以完成以下任务吗?如果是这样如何?SQl按日期范围查询

  • SELECT从表1 * WHERE(ColumnDate是2010年3月的第26和19之间)
  • SELECT从表1 * WHERE(ColumnAge是25和40之间)通常< < =运算

似乎没有工作。

感谢,

回答

5
SELECT * from Table1 WHERE (CDATE(ColumnDate) BETWEEN #03/26/2010# AND #03/19/2010#) 
SELECT * from Table1 WHERE (CINT(ColumnAge) between 25 and 40) 

日期在#MM/DD/YYYY#表示在#符号之间的访问。 你应该真的将日期存储为日期字段:)

+0

谢谢, 我需要搜索那些年龄介于25到40岁之间的人。 – tecno 2010-03-26 10:07:22

+0

BETWEEN结果包括两个外部范围值。你应该得到年龄在25岁到40岁之间的人。 – Codesleuth 2010-03-26 10:10:06

+0

谢谢再次感谢。 – tecno 2010-03-26 10:16:19

1
SELECT * from Table1 WHERE ColumnDate between '2010-03-26' and '2010-03-19' 
SELECT * from Table1 WHERE ColumnAge between 25 and 40 

我不使用Access,所以因人而异。

+0

您不使用Access,并发布不会在Access中运行的SQL。如果列中的所有日期存储为yyyy-mm-dd,则第一个将起作用,但不以其他方式存储。第二个不行,因为原来的问题说所有的字段都是文本。 – 2010-03-26 19:04:47

1

尝试使用CDate函数将ColumnDate转换为实际日期/时间。我想可以用CInt来完成转换为int的操作。

我不使用Access,所以这只是一个常识性的猜测。

+0

这些内置的SQL函数,如果是这样,他们如何在查询中调用它们。一个例子,将不胜感激。 – tecno 2010-03-26 10:09:34

+0

其实Anton Gogolev的回答提醒我把它们放到我的样本中。所以,他配得上我:) – Codesleuth 2010-03-26 10:11:16

0

Mr.David-W-Fenton说得对,Marcelo的第一个SELECT * from Table1 WHERE ColumnDate between '2010-03-26' and '2010-03-19'不工作,并且错误地暗示原因。该条款是不正确的,因为日期字符串表示引号,日期格式非常好。所以我认为

SELECT * from Table1 WHERE CDATE(ColumnDate) between #2010-03-26# and #2010-03-19#

一个妥善的解决办法。

+0

唷,你说得对,我只是跟着马塞洛。谢谢,修复查询。 – 2012-12-02 08:23:29